如何在同一.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上名为ddl1OnPanel1
的DropDownList
触发其SelectedIndexChanged
-
名为
ddl2OnPanel1
的UpdatePanel 2也将在UpdatePanel 1上名为ddl2OnPanel1
的DropDownList
引发其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,因为此时不需要
如果您使用的是嵌套更新面板,请参阅以下示例代码:
如果不使用嵌套更新面板,则从代码的两个Updatepanel中删除“UpdateMode”条件。