当我在一个更新面板上点击按钮时,如何防止所有更新面板重新加载?

3

我有一个包含两个更新面板的Web表单:

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

<p>
    <asp:UpdatePanel ID="upl1" runat="server">
        <ContentTemplate>
            <asp:Button runat="server" ID="btn1" Text="Button1" />
        </ContentTemplate>
    </asp:UpdatePanel>

    <asp:UpdatePanel ID="upl2" runat="server">
        <ContentTemplate>
            <asp:Button runat="server" id="btn2" Text="Button2" />
        </ContentTemplate>
    </asp:UpdatePanel>
</p>

如果我点击 btn1,那么会触发 upl2 的加载事件和 upl1 的加载事件。
但是我只期望 upl1 被加载,因为这是包含按钮的更新面板。
为什么会出现这种情况?我该如何解决?

我认为你需要使用触发器来正确地隔离正确的更新面板 - 可以查看这个MSDN教程http://www.asp.net/web-forms/tutorials/aspnet-ajax/understanding-asp-net-ajax-updatepanel-triggers - Luke Baughan
2个回答

1

在我使用Update Panels时,我总是会设置以下属性:

ChildrenAsTriggers="false" UpdateMode="Conditional"

并且只有在需要时才刷新Update Panel:

protected void btn1_Click(object sender, EventArgs e)
{
    // some logic
    // ....
    upl1.Update();
}

尝试应用这些属性,看看是否可以解决你的问题。


抱歉,每次点击按钮时,两个上传面板仍会重新加载。 - Urbycoz
这两个 UpdatePanel 不是在另一个 UpdatePanel 中吗? - Marcus Vinicius
他们不应该这样做。但是当有嵌套的UpdatePanels并且父级被配置为UpdateMode="Always"时,就会发生这种情况。 - Marcus Vinicius

0

我曾经遇到过一个类似的问题,即按钮触发UpdatePanel,使用ChildrenAsTriggers="false" UpdateMode="Conditional"也没有帮助。

最终我使用了以下方法来强制按钮进行常规的后台提交:

 ScriptManager1.RegisterPostBackControl(btn1);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接