嵌套的UpdatePanel:为什么ChildrenAsTriggers没有效果?

5

给出一个两个嵌套 UpdatePanel 的简单示例。它们嵌套,并且每个 UpdatePanel 都有一个标签,该标签在代码后端中填充了当前时间。我不明白为什么外部 UpdatePanel 上的 ChildrenAsTriggers="true" 属性没有效果?当我点击“更新嵌套面板”按钮时,父 UpdatePanel 中的时间不会更新。但据我所知,该属性应该是:

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

<asp:Button ID="ButtonUpdate" runat="server" Text="Update Panel 1"
    style="margin-top: 15px" onclick="ButtonUpdate_Click" />
<asp:Button ID="ButtonUpdateNestedPanel" runat="server" Text="Update Nested Panel"
    style="margin-top: 15px" onclick="ButtonUpdateNestedPanel_Click" />

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="true">
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="ButtonUpdate" EventName="Click" />
    </Triggers>
    <ContentTemplate>
        <asp:Label ID="Label1" runat="server" />

        <asp:UpdatePanel ID="UpdatePanelNested" runat="server">
            <Triggers>
                <asp:AsyncPostBackTrigger ControlID="ButtonUpdateNestedPanel" EventName="Click" />
            </Triggers>
            <ContentTemplate>
                <asp:Label ID="LabelNested" runat="server" />
            </ContentTemplate>
        </asp:UpdatePanel>

    </ContentTemplate>
</asp:UpdatePanel>

感谢任何提示! sl3dg3
附注:后台代码:
protected void ButtonUpdate_Click(object sender, EventArgs e)
{
    LabelNested.Text = DateTime.Now.ToString();
    Label1.Text = DateTime.Now.ToString();
}
protected void ButtonUpdateNestedPanel_Click(object sender, EventArgs e)
{
    LabelNested.Text = DateTime.Now.ToString();
    Label1.Text = DateTime.Now.ToString();
}
3个回答

1
当ChildrenAsTriggers属性设置为true时,UpdatePanel控件的任何子控件引起回发。嵌套UpdatePanel控件的子控件不会导致外部UpdatePanel控件更新,除非它们被明确定义为父面板的触发器。 http://forums.asp.net/t/1422425.aspx/1
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="true">
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="ButtonUpdate" EventName="Click" />
            <asp:AsyncPostBackTrigger ControlID="ButtonUpdateNestedPanel" EventName="Click" />
        </Triggers>
......   
......

嗯,但我也可以不使用“ChildrenAsTriggers” - 它会更新任何一种方式...我只是无法理解这个属性的意义。 - sl3dg3

0

我相信,为了看到所需的效果,您应该将按钮实际添加为内容模板中的子项。 "ChildrenAsTriggers" 属性仅适用于 "ContentTemplate" 块的直接子项。


-1

ChildrenAsTriggers="true" 如果您希望来自UpdatePanel控件的直接子控件的回发导致面板内容的更新,请将ChildrenAsTriggers属性设置为true。嵌套UpdatePanel控件的子控件不会导致父UpdatePanel控件内容的更新,除非您显式调用Update方法或将子控件定义为触发器。


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