0

简单的 Ajax 程序需要在单击按钮时更新单个更新面板,两者都可以。这是更新的代码,

    <asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" ChildrenAsTriggers="false"
            runat="server">
            <ContentTemplate>
                <fieldset style="width: 30%">
                    <legend>Panel - 1 </legend>
                    <asp:Label ID="label1" runat="server"></asp:Label>
                    <asp:Button ID="b1" runat="server" OnClick="both" Text="Update Both Pannels" />
                    <asp:Button ID="b2" runat="server" OnClick="one" Text="Update Single Pannel" />
                </fieldset>
            </ContentTemplate>
            <Triggers>
                <asp:AsyncPostBackTrigger ControlID="b1" EventName="Click" />
            </Triggers>
        </asp:UpdatePanel>
        <asp:UpdatePanel ID="UpdatePanel2" runat="server" ChildrenAsTriggers="true" UpdateMode="Conditional">
            <ContentTemplate>
                <fieldset style="width: 30%">
                    <legend>Panel - 2 </legend>
                    <asp:Label ID="label2" runat="server"></asp:Label>
                </fieldset>
            </ContentTemplate>
            <Triggers>
                <asp:AsyncPostBackTrigger ControlID="b2" EventName="Click" />
            </Triggers>
        </asp:UpdatePanel>

按钮点击事件如下,

protected void both(object sender, EventArgs e)
{
    label1.Text = DateTime.Now.ToLongTimeString();
    label2.Text = DateTime.Now.ToLongTimeString();
    UpdatePanel2.Update();

}
protected void one(object sender, EventArgs e)
{
    label1.Text = DateTime.Now.ToLongTimeString();
    label2.Text = DateTime.Now.ToLongTimeString();
    UpdatePanel2.Update();
}

输出保持不变..提前谢谢...

4

1 回答 1

2

从参考到 MSDN 如果 UpdateMode 属性设置为 Conditional,则 UpdatePanel 控件的内容会在以下情况之一为真时更新:

  1. 当回发是由该 UpdatePanel
    控件的触发器引起时。
  2. 当您显式调用 UpdatePanel 控件的 Update 方法时。
  3. 当 UpdatePanel 控件嵌套在另一个 UpdatePanel 控件中并且父面板被更新时。
  4. 当 ChildrenAsTriggers 属性设置为 true 并且 UpdatePanel 控件的任何子控件都会导致回发。嵌套 UpdatePanel 控件的子控件不会导致对外部 UpdatePanel 控件的更新,除非它们被明确定义为父面板的触发器。

因此,将 ChildrenAsTigger 设置为 false 为您的第一个更新面板设置异步触发器,如下所示。

<asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" ChildrenAsTriggers="false" runat="server">
        <ContentTemplate>
        <fieldset style="width:30%">
        <legend>Panel - 1
        </legend>
        <asp:Label ID="label1" runat="server"></asp:Label>
        <asp:Button ID="b1" runat="server" OnClick="both" Text="Update Both Pannels" />
        <asp:Button ID="b2" runat="server" OnClick="one" Text="Update Single Pannel" />
        </fieldset>
        </ContentTemplate>
     <Triggers>
        <asp:AsyncPostBackTrigger ControlID="b1" EventName="Click" />
        </Triggers>
        </asp:UpdatePanel>
 <asp:UpdatePanel ID="UpdatePanel2" runat="server" ChildrenAsTriggers="true" UpdateMode="Conditional">
    <ContentTemplate>
    <fieldset style="width:30%">
    <legend>Panel - 2
    </legend>
    <asp:Label ID="label2" runat="server"></asp:Label>
    </fieldset>
    </ContentTemplate>
    <Triggers>
    <asp:AsyncPostBackTrigger ControlID="b2" EventName="Click" />
    </Triggers>
    </asp:UpdatePanel>

之后单击 B1 BUTTON 显式更新第二个更新面板...如下所示

protected void both(object sender, EventArgs e)
{
    label1.Text = DateTime.Now.ToLongTimeString();
    label2.Text = DateTime.Now.ToLongTimeString();
    UpdatePanel2.Update();
}



  protected void one(object sender, EventArgs e)
    {
        label1.Text = DateTime.Now.ToLongTimeString();
        label2.Text = DateTime.Now.ToLongTimeString();
       UpdatePanel2.Update();
    }
于 2013-07-09T08:45:12.903 回答