如何在同一.aspx页面上使用两个更新面板

我在页面上有两个更新面板。 我想在不同的条件下更新它们的两个条件。 但我不知道为什么这不会发生。 我已为两者指定了触发器,但没有帮助,下面是我的代码。

请让我知道我哪里错了。

实际上,当第一个更新面板中的selectedindexchange被触发时,第一个更新面板中有三个下拉列表,然后第二个更新面板的内容也会更新。

  
     

第二个如下: –

                  

首先,我想回忆一下UpdateMode的用法

  • Always该面板将在页面上的每个post上更新其内容,它们可以是部分呈现post或完整post,在这两种情况下,面板的内容都将更新

  • Conditional只有满足不同条件时,才会更新面板内容:

    • 默认情况下,由其子对象触发的事件将触发更新,您可以更改此行为设置ChildrenAsTriggers="false"

    • UpdatePanel的“ Triggers部分中声明Triggers

    • 显式调用UpdatePanel.Update()方法时

    • 整页post将触发更新

以下代码执行以下操作:

  • 每个UpdatePanel在其子控件引发事件时更新

  • 名为: up1的UpdatePanel 1 在其子控件引发事件时才会更新

  • 名为up2的UpdatePanel 2将在其子控件引发事件时更新

  • 名为up2的UpdatePanel 2也将在触发定义的触发器时更新,在这种情况下,当UpdatePanel 1上名为ddl1OnPanel1DropDownList触发其SelectedIndexChanged

  • 名为ddl2OnPanel1的UpdatePanel 2也将在UpdatePanel 1上名为ddl2OnPanel1DropDownList引发其SelectedIndexChanged ,因为在代码中它显式调用: this.up2.Update();

我认为通过调整此代码,您可以实现所需的目标,只需将其粘贴到新页面并运行即可

检查以下代码(根据引发的事件,查看显示日期的标签如何以不同方式受到影响):

代码背后

  protected void ddl1OnPanel1_SelectedIndexChanged(object sender, EventArgs e) { this.lblMessageOnPanel1.Text = "From ddl1 " + DateTime.Now.ToString(); this.calendarOnPanel2.SelectedDate = DateTime.Today.AddDays(1); this.lblMessageOnPanel2.Text = "From ddl1 " + DateTime.Now.ToString(); } protected void ddl2OnPanel1_SelectedIndexChanged(object sender, EventArgs e) { this.lblMessageOnPanel1.Text = "From ddl2 " + DateTime.Now.ToString(); this.calendarOnPanel2.SelectedDate = DateTime.Today.AddDays(2); this.lblMessageOnPanel2.Text = "From ddl2 " + DateTime.Now.ToString(); this.up2.Update(); } 

ASPX

    




On every post on Panel 1: <%:DateTime.Now %>




On every post On Panel 2: <%:DateTime.Now %>

简单的输出

在此处输入图像描述

您可以更改UpdatePanel 2上的UpdateMode="Always" ,看看区别,如果您这样做,此面板将在每个post上更新,包括来自UpdatePanel1的完整post或post

如果要进行异步后备,请从DropdownLists中删除Autopostback =“True”。 此外,目前究竟出现了什么问题? updatepanels根本没有更新?

编辑。 同时删除childrenAsTriggers,因为此时不需要

如果您使用的是嵌套更新面板,请参阅以下示例代码:

   
Parent UpdatePanel Last refresh <%=DateTime.Now.ToString() %>
Nested UpdatePanel Last refresh <%=DateTime.Now.ToString() %>

如果不使用嵌套更新面板,则从代码的两个Updatepanel中删除“UpdateMode”条件。