ASP.NET updatepanel в скрытой панели возможная ошибка

JavaScript, сгенерированный управлением asp.net SciptManager, кажется, имеет ошибку, и наклон обрабатывают скрытый UpdatePanels. Ошибка JavaScript брошена, когда управление в одной обновленной панели пытается сделать другую панель обновления видимой.

Действительно ли это - ошибка с Ajax ASP.NET? И у кого-либо есть какие-либо идеи, как обойти это?

Вот пример того, что я пытаюсь сделать

<script type="text/C#" runat="server">
    protected void LinkButton1_Click(object sender, EventArgs e)
    {
        Panel1.Visible = true;
    }
</script>

<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
        <asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click" Text="Show Panel"></asp:LinkButton>
    </ContentTemplate>
</asp:UpdatePanel>

<asp:Panel ID="Panel1" runat="server" Visible="false">
    <asp:UpdatePanel ID="UpdatePanel2" runat="server">
        <ContentTemplate>
            blah bla blah
        </ContentTemplate>
    </asp:UpdatePanel>
</asp:Panel>

Это - ошибка JavaScript, которая брошена при нажатии на ссылку "LinkButton1". Эта ошибка прибывает из JavaScript, который сгенерирован управлением asp.net ScriptManager

Error: Sys.InvalidOperationException: Could not find UpdatePanel with ID 'ctl00_ContentPlaceHolder1_UpdatePanel2'
6
задан Bill the Lizard 23 June 2011 в 23:51
поделиться

2 ответа

Вы столкнулись с проблемами, потому что содержимое Panel1 не отображается при первом отображении страницы. Это приводит к неправильной инициализации UpdatePanel2.

(Диспетчер запросов страниц, который управляет всеми частичными обновлениями, должен знать о существовании UpdatePanel2, и этого просто не произойдет, если он не отображается. Кроме того, если подумать, панель обновлений должна отображать некоторые элементы, если только добавить div-заполнитель, в который он будет вставлять свое содержимое при частичной обратной передаче).

Я не знаю точно, чего вы пытаетесь достичь, но если вы просто хотите, чтобы ваш UpdatePanel2 запускался элементом управления, который не находится внутри панели обновления, установите LinkButton1 в качестве такого триггера.

<script runat="server">
    protected void LinkButton1_Click(object sender, EventArgs e)
    {
        blabla.Visible = true;
    }
</script>

<asp:ScriptManager ID="ScriptManager1" runat="server" ScriptMode="Debug">
</asp:ScriptManager>

<asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click" Text="Show Panel"></asp:LinkButton>

<asp:UpdatePanel ID="UpdatePanel2" runat="server" >
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="LinkButton1" />
    </Triggers>
    <ContentTemplate>
        <asp:PlaceHolder runat="server" ID="blabla" Visible="false">
        blah bla blah
        </asp:PlaceHolder>
    </ContentTemplate>
</asp:UpdatePanel>

Если LinkButton1 действительно должен находиться внутри панели обновления (возможно, LinkButton1 не всегда виден?), Вы можете сделать что-то вроде следующего

<script runat="server">
    protected void LinkButton1_Click(object sender, EventArgs e)
    {
        blabla.Visible = true;
        UpdatePanel2.Update();
    }
</script>

<asp:ScriptManager ID="ScriptManager1" runat="server" ScriptMode="Debug">
</asp:ScriptManager>

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional" >
    <ContentTemplate>
        <asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click" Text="Show Panel"></asp:LinkButton>
    </ContentTemplate>
</asp:UpdatePanel>

<asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional" >
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="LinkButton1" />
    </Triggers>
    <ContentTemplate>
        <asp:PlaceHolder runat="server" ID="blabla" Visible="false">
        blah bla blah
        </asp:PlaceHolder>
    </ContentTemplate>
</asp:UpdatePanel>
3
ответ дан 17 December 2019 в 04:42
поделиться

Ошибка, которую вы получаете, связана не с JavaScript, а с ASP.NET.

Вы получаете ее потому, что пытаетесь сделать видимой Panel1, которая находится вне UpdatePanel, которую вы вызываете, а это невозможно.

Все, что вы собираетесь обновить на веб-странице, должно находиться внутри вызываемой вами UpdatePanel.

2
ответ дан 17 December 2019 в 04:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: