Оба Updatepanel получают обновление, пока только 1 должен работать

Простая 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();
}

Выход остается прежним.. Заранее спасибо...

1 ответ

Решение

От ссылки на MSDN Если для свойства UpdateMode установлено значение "Условный", содержимое элемента управления UpdatePanel обновляется, если выполняется одно из следующих условий:

  1. Когда обратная связь вызвана триггером для этой UpdatePanel
    контроль.
  2. Когда вы явно вызываете метод Update элемента управления UpdatePanel.
  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 обновите панель обновления sceond явно... как показано ниже

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();
    }
Другие вопросы по тегам