【问题标题】:Both Updatepanel's getting update, while only 1 have to work两个更新面板都在更新,而只有 1 个必须工作
【发布时间】:2013-07-09 08:22:29
【问题描述】:

简单的 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();
}

输出保持不变..在此先感谢...

【问题讨论】:

  • 您的描述不清楚。请清除您的解释。
  • 没有错误。单击两个按钮会在两个标签中显示时间。但是,预期的实际输出是,如果我单击第二个按钮,则只有第一个标签想要更新当前时间。感谢您的回复。

标签: asp.net ajax updatepanel partial-postback


【解决方案1】:

从参考到 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();
    }

【讨论】:

  • 再次感谢 :) 这不会加载 Label1。如果调用了both 按钮,Label2 可以正常工作。怎么办?
  • @Developer 找不到你?
  • 如果我更改 ChildrenAsTriggers="false", Label1 在任何情况下都不会受到影响。它只是保持空白。?
  • 点击 b2 没问题..点击 b1...它不会更新 label2 对..试试我修改后的代码
  • 很抱歉,它保持不变。我正在同时处理另一个样本,并在其中进行了一些修改。我没有在 panel1 中打印。但此示例输出保持不变。很抱歉之前的评论...
猜你喜欢
  • 1970-01-01
  • 2011-07-27
  • 2010-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多