PS::我在论坛发了个求助帖子,居然没啥人回。。好纠结啊...
http://bbs.csdn.net/topics/390809330
目的:三个dropdownlist A B C, 要求实现 A 联动 C, B 联动 C
涉及:ScriptManager . UpdatePanel , Triggers, AsyncPostBackTrigger
ScriptManager 对象集:启用局部呈现
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
其中,ScriptManager包含属性EnablePartialRendering="True'如果启用了部分呈现且完全页面更新被禁止,则为 true;否则为 false。 默认值为 true。
在Page_Load 事件中,使用您页面中 ScriptManager 对象的RegisterAsyncPostBackControl(Control)方法。请记住页面是无状态的,因此每次创建控件时都要重新注册这些控件。
UpdatePanel
一个 UpdatePanel 控件有两个子元素。
最常见的元素是<ContentTemplate> 元素,它实质上封装的是将被update panel 包含的内容(即我们实现局部呈现的内容)。
另一个元素是<Triggers>,用于指定页面上的控件(或您在使用的用户控件),该控件将触发<Triggers> 元素所属 UpdatePanel 的局部呈现。
Triggers
包含以下两个字节点中的每一个且数量不限:<asp:AsyncPostBackTrigger>和<asp:PostBackTrigger>。两个共有属性:ControlID 和 EventName,且可以在当前封装单元中指定任何控件。
<asp:AsyncPostBackTrigger>元素最大的用处是它可用于从封装单元中的 任何 UpdatePanel 控件的子控件指定事件,而不只是此触发器的父UpdatePanel。任何控件都可触发局部页面更新。
<asp:PostBackTrigger>元素可用于触发局部页面呈现,但要求到服务器的完整往返行程。此触发器元素也可用于在控件如无异常则正常触发局部页面呈现时(例如,当UpdatePanel 控件的 <ContentTemplate> 元素中有一个 Button 控件时),强制执行完整页面呈现。同样,PostBackTrigger 元素可指定当前封装单元中的任何UpdatePanel 控件的任何子控件。
标签 |
说明 |
<asp:AsyncPostBackTrigger> |
指定一个控件和事件,将引发包含触发器引用的UpdatePanel的局部页面更新。 |
<asp:PostBackTrigger> |
指定一个将引发完全页面更新(整个页面刷新)的控件和事件。此标记可用于在控件如无异常则正常触发局部页面呈现时强制执行完整页面呈现。 |
当初目标是: 两个 dropdownlist 触发 updatePanel里的list,但这两个list可能为空选项,则不触发
现在情况是,load页面,第一次点击的list选项会直接触发 updatePanel的list, 之后可以任意改变异步触发,
同时,另一个list无效 对其无反应, 执行查询或提交按钮,可以全部取到list值
也就是说 任一dropdownlist 选项可以触发,但不能同时触发
</pre>问题代码:<pre name="code" class="csharp"><asp:DropDownList ID="lstDepName" runat="server" Width="200px" AutoPostBack="true" OnSelectedIndexChanged="lstDepName_SelectedIndexChanged">
</asp:DropDownList>
<asp:DropDownList ID="lstCooType" runat="server" Width="200px" AutoPostBack="true" OnSelectedIndexChanged="lstCooType_SelectedIndexChanged">
</asp:DropDownList>
<asp:UpdatePanel ID="updatePanel1" runat="server" ChildrenAsTriggers="true" >
<Triggers>
<asp:AsyncPostBackTrigger ControlID="lstDepName" EventName="SelectedIndexChanged" />
<asp:AsyncPostBackTrigger ControlID="lstCooType" EventName="SelectedIndexChanged" />
</Triggers>
<ContentTemplate>
<asp:DropDownList ID="lstCooName" runat="server" Width="200px">
</asp:DropDownList>
</ContentTemplate>
</asp:UpdatePanel>
解决方法:
我查了查, triggers的 EventName="SelectedIndexChanged"
貌似只能被同一个事件触发一次,可以有多个事件触发,
但好像只能被多个同一个事件控制。。。
貌似
如果做两级联动是没有问题的, 多级就无法实现
用AJAX, 会更好实现
综上所述,问题尚未完全解决,如果您有好的解释或解决方法,请回复,谢谢
参考资料:
http://forums.asp.net/t/1015714.aspx