【问题标题】:When UpdatePanel make PostBack to another one当 UpdatePanel 使 PostBack 到另一个
【发布时间】:2011-01-31 11:10:02
【问题描述】:

我有一个复杂的案例,所以我不能发布它。

我有两个UpdatePanels,里面有两个UserControls,如下所示:

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
        <A:u1 ID="u1" runat="server" />
    </ContentTemplate>
</asp:UpdatePanel>
<asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
        <A:u2 ID="u2" runat="server" />
    </ContentTemplate>
</asp:UpdatePanel>

在此示例中,u1 中的 PostBack 不会影响 u2。但在我的代码中,第一个 UserControl 中的 PostBack 在第二个中生成了 PostBack

预期的原因是什么??

感谢您的帮助。

【问题讨论】:

    标签: asp.net updatepanel


    【解决方案1】:

    这是设计使然:当发生部分回发时,即使只有部分结果标记被发送到客户端,也会再次呈现整个页面。因此,即使只更新了 u1,您的两个用户控件也会再次经历其生命周期。

    如果您想检测这种情况,可以使用IsInAsyncPostBack 属性:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (ScriptManager.GetCurrent(Page).IsInAsyncPostBack) {
            // This is a partial postback.
        }
    }
    

    【讨论】:

    • 抱歉,但在我编写的示例中,我在UserControlsPage_Load 中添加了一个断点,当另一个创建PostBack 时不会调用它跨度>
    • @John,很有趣,它definitely should be called。您的断点是否设置在处理程序的开头?
    • 谢谢,你说得对。但在两个UserControls 中,它被输入到 if 语句中。抱歉,为什么?
    • @John,它可能会进入if 语句,因为您处于部分回发中,这就是意图。该代码旨在区分部分回发(来自更新面板)和完整回发(导致整个页面被刷新)。
    猜你喜欢
    • 1970-01-01
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-16
    • 1970-01-01
    相关资源
    最近更新 更多