为何出错?Triggers, dropdownlist两级联动,触发一个updatePanel异步刷新列表

问道于旁 2014-06-11 06:15:32
出错?Triggers, dropdownlist两级联动,触发一个updatePanel异步刷新列表

目标是: 两个 dropdownlist 触发 updatePanel里的list,
但,这两个list可能为空选项,则不触发

现在情况是,load页面,第一次点击的list选项会直接触发 updatePanel的list, 之后可以任意改变异步触发,
同时,另一个list无效 对其无反应, 执行查询或提交按钮,可以全部取到list值
也就是说 任一dropdownlist 选项可以触发,但不能同时触发


<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>


求解答。。。。。。。。
...全文
537 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
问道于旁 2014-06-17
  • 打赏
  • 举报
回复
引用 11 楼 u014083627 的回复:
[quote=引用 10 楼 istend 的回复:] 怎么想到用button? list明显是个集合, A B C 都是集合啊
这跟是不是集合有什么关系,意思都一样,现在你遇到的问题是触发器只能触发一个事件,没法触发两个DDL事件,那么就把这个触发器事件定为Button的Onclick事件,你的后台操作代码写进Onclick事件里,选择完A 和B后,点击Button将结果返回到C中。[/quote] 这个触发事件是 下拉框选择数据, 怎么做成button click 写到总提交里? 那不行,不符合用户要求
问道于旁 2014-06-17
  • 打赏
  • 举报
回复
1. 第一个DDL 州 也需要刷新数据么? 不太理解,为什么三个都需要触发,第一个是主动,第二个第三个应该是被动的啊 2. 触发后重新绑定数据是对的,这个没有问题,
引用 12 楼 save4me 的回复:
UpdatePanel1中的ContentTemplate是局部刷新的内容,也就是三个DropDownList都会刷新。你可以看到后台代码中三个SelectedIndexChanged的里面,都有ShowUserXXX的函数,文中没有写出来,但是应该是给每次刷新的时候重新绑定数据源 [quote=引用 6 楼 istend 的回复:] 我有个问题,
<asp:AsyncPostBackTrigger ControlID="DDLUserCountry" EventName="SelectedIndexChanged" />
如你所述,三个 州,市,区分别是 DDLUserCountry DDLCity DDLArea 肯定是 州触发,市 再到区,但州 DDLUserCountry 写到 triggers 里,是作为 UpdateMode="Conditional" ChildrenAsTriggers="false"> 触发条件控制局部刷新?
[/quote]
save4me 2014-06-17
  • 打赏
  • 举报
回复
第一个DDL不是州。他的例子里面有四个下拉列表,第一个国别DDLUserCountry在UpdatePanel之外(你看前台代码第一行),所以第一个不需要刷新。并且它的AutoPostBack="True",所以选择改变时自动回传给服务器 。
引用 13 楼 istend 的回复:
1. 第一个DDL 州 也需要刷新数据么? 不太理解,为什么三个都需要触发,第一个是主动,第二个第三个应该是被动的啊 2. 触发后重新绑定数据是对的,这个没有问题,
save4me 2014-06-16
  • 打赏
  • 举报
回复
UpdatePanel1中的ContentTemplate是局部刷新的内容,也就是三个DropDownList都会刷新。你可以看到后台代码中三个SelectedIndexChanged的里面,都有ShowUserXXX的函数,文中没有写出来,但是应该是给每次刷新的时候重新绑定数据源
引用 6 楼 istend 的回复:
我有个问题,
<asp:AsyncPostBackTrigger ControlID="DDLUserCountry" EventName="SelectedIndexChanged" />
如你所述,三个 州,市,区分别是 DDLUserCountry DDLCity DDLArea 肯定是 州触发,市 再到区,但州 DDLUserCountry 写到 triggers 里,是作为 UpdateMode="Conditional" ChildrenAsTriggers="false"> 触发条件控制局部刷新?
问道于旁 2014-06-16
  • 打赏
  • 举报
回复
我有个问题,
<asp:AsyncPostBackTrigger ControlID="DDLUserCountry" EventName="SelectedIndexChanged" />
如你所述,三个 州,市,区分别是 DDLUserCountry DDLCity DDLArea 肯定是 州触发,市 再到区,但州 DDLUserCountry 写到 triggers 里,是作为 UpdateMode="Conditional" ChildrenAsTriggers="false"> 触发条件控制局部刷新?
引用 2 楼 istend 的回复:
[quote=引用 1 楼 save4me 的回复:] UpdatePanel换成下面的试一下

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="false">
不是这个问题,无效 我查了查, triggers的 EventName="SelectedIndexChanged" 貌似只能被同一个事件触发一次,可以有多个事件触发,但好像只能被多个同一个事件控制。。。 貌似[/quote]
改我名的傻子 2014-06-16
  • 打赏
  • 举报
回复
引用 10 楼 istend 的回复:
怎么想到用button? list明显是个集合, A B C 都是集合啊
这跟是不是集合有什么关系,意思都一样,现在你遇到的问题是触发器只能触发一个事件,没法触发两个DDL事件,那么就把这个触发器事件定为Button的Onclick事件,你的后台操作代码写进Onclick事件里,选择完A 和B后,点击Button将结果返回到C中。
问道于旁 2014-06-16
  • 打赏
  • 举报
回复
引用 9 楼 u014083627 的回复:
[quote=引用 8 楼 istend 的回复:] 三个dropdownlist A B C 操作一次: A触发C,B触发C(A,B无先后次序)  也就是求AB交集,但A B 可能都为空或只有一个为空
如果是这样的话,做个Button不就解决了么,还是说你这里有什么特殊的机制要求不方便用Button[/quote] 怎么想到用button? list明显是个集合, A B C 都是集合啊 
改我名的傻子 2014-06-16
  • 打赏
  • 举报
回复
引用 8 楼 istend 的回复:
三个dropdownlist A B C 操作一次: A触发C,B触发C(A,B无先后次序)  也就是求AB交集,但A B 可能都为空或只有一个为空
如果是这样的话,做个Button不就解决了么,还是说你这里有什么特殊的机制要求不方便用Button
问道于旁 2014-06-16
  • 打赏
  • 举报
回复
引用 7 楼 u014083627 的回复:
首先,你这么写是肯定不能同时触发的,计算机没那么智能。 然后就是你的这个DDL联动为什么要这样写呢,那两个同时触发的DDL之间有逻辑关系吗? 我觉得不管有没有逻辑关系,都不至于要同时触发吧,希望楼主把你这几个DDL说得再具体点,才好判断要怎样写
姑且不论你的意见,把目的详细解说下 三个dropdownlist A B C 操作一次: A触发C,B触发C(A,B无先后次序)  也就是求AB交集,但A B 可能都为空或只有一个为空, 我说的同时是指一次操作中的, 可能有歧义,不好意思
改我名的傻子 2014-06-16
  • 打赏
  • 举报
回复
首先,你这么写是肯定不能同时触发的,计算机没那么智能。 然后就是你的这个DDL联动为什么要这样写呢,那两个同时触发的DDL之间有逻辑关系吗? 我觉得不管有没有逻辑关系,都不至于要同时触发吧,希望楼主把你这几个DDL说得再具体点,才好判断要怎样写
问道于旁 2014-06-13
  • 打赏
  • 举报
回复
引用 3 楼 save4me 的回复:
是看到这篇博文,他是设置了三个EventName="SelectedIndexChanged"分别更新州,城市和区三个DropDownList。 使用 UpdatePanel 實現 DropdownList 不刷新連動,包含設置與使用方法 [quote=引用 2 楼 istend 的回复:] 不是这个问题,无效 我查了查, triggers的 EventName="SelectedIndexChanged" 貌似只能被同一个事件触发一次,可以有多个事件触发,但好像只能被多个同一个事件控制。。。 貌似
[/quote] 哥们,你这是境外网站么, 为毛打不开, 香港的还是台湾的
save4me 2014-06-13
  • 打赏
  • 举报
回复
是繁体的,我把原文给复制过来,你看看他写的和你的有没有什么地方不一样
引用
這裡使用的是 C# .net frameworK 4.0 的 UpdatePanel 元件,如果要使用.net frameworK 3.5 或 .net frameworK 2.0設置方法請在google上搜尋。

web.config設置

將 <system.web> 下 <xhtmlConformance mode="Legacy"/> 移除,此段為web標準的設置,但宣告此語法會讓 ajax 加載相關 js 時只加載一部份,以至於 UpdatePanel 失效,故拿掉此段語法。

UpdatePanel 的屬性、事件的相關說明


UpdatePanel 的 UpdateMode 屬性有兩個值,分別為 Always 與 Conditional ,預設值為 Always ,如果 UpdateMode 屬性設定為 Always,每次收到源自該網頁任何部分的回傳時都會更新 UpdatePanel 控制項的內容。 這包括來自其他 UpdatePanel 控制項內部之控制項的非同步回傳,以及來自並非位於 UpdatePanel 控制項內部之控制項的回傳(意思是︰當設定為 Always 時,頁面上 UpdatePanel 控制項中的任何一個元件觸發動作,都會觸發頁面上任何一個 UpdatePanel 的更新。)

為了讓 UpdatePanel 運作效能更好,可將 UpdateMode 屬性設置為 Conditional,但必須宣告 UpdatePanel 控制項的 Triggers 子控制項中的 AsyncPostBackTrigger 觸發程序,才會觸發元件下的更新程序(EX︰ DropdownList 的連動)。這樣的好處是一來效能增加,二來不管元件(Textbox、GridView、DropdownList等)在 UpdatePanel 控制項之內或之外都可被觸發。

如果 UpdatePanel 控制項的 ChildrenAsTriggers 屬性設定為 true, 包在 UpdatePanel 控制項的內的元件(Textbox、GridView、DropdownList等)會全部被更新,這樣會浪費系統效能,所以可將 ChildrenAsTriggers 屬性設定為 false,並設定每一個元件的觸發程序,這樣可一次只更新一個元件,而不是整個 UpdatePanel 控制項都更新。

前台aspx code︰

<asp:DropDownList ID="DDLUserCountry" runat="server" AutoPostBack="True" OnSelectedIndexChanged="DDLUserCountry_SelectedIndexChanged"></asp:DropDownList>
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="false">
<ContentTemplate>
<br />
<label id="LabUserState" runat="server">州別︰</label>
<asp:DropDownList ID="DDLUserState" runat="server"></asp:DropDownList>
城市︰<asp:DropDownList ID="DDLCity" runat="server" OnSelectedIndexChanged="DDLCity_SelectedIndexChanged" AutoPostBack="True"></asp:DropDownList>
<asp:Label runat="server" ID="LabArea">區︰</asp:Label>
<asp:DropDownList ID="DDLArea" runat="server" OnSelectedIndexChanged="DDLArea_SelectedIndexChanged" AutoPostBack="True"></asp:DropDownList>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="DDLUserCountry" EventName="SelectedIndexChanged" />
<asp:AsyncPostBackTrigger ControlID="DDLCity" EventName="SelectedIndexChanged" />
<asp:AsyncPostBackTrigger ControlID="DDLArea" EventName="SelectedIndexChanged" />
</Triggers>
</asp:UpdatePanel>


在 <Triggerrs> 下的 <asp:AsyncPostBackTrigger> 設定觸發條件,ControlID 為元件 ID,EventName 為觸發方式,SelectedIndexChanged 為 DropdownList 觸發方法。

後台cs code︰

照原本DropdownList觸發條件編寫即可。


#region//*********國別連動*********
protected void DDLUserCountry_SelectedIndexChanged(object sender, EventArgs e)
{
    //UpdatePanel1.Update();
    ShowUserState("0");
    ShowUserCity();
}
#endregion
 
#region//*********台灣城市連動*********
protected void DDLCity_SelectedIndexChanged(object sender, EventArgs e)
{
    LabNumber.Text = "";
    ShowUserArea();
}
#endregion
 
#region//*********台灣區連動*********
protected void DDLArea_SelectedIndexChanged(object sender, EventArgs e)
{
    ShowUserNumber();
}
#endregion


微軟msdn參考︰http://msdn.microsoft.com/zh-tw/library/bb359258.aspx
save4me 2014-06-12
  • 打赏
  • 举报
回复
UpdatePanel换成下面的试一下

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="false">
save4me 2014-06-12
  • 打赏
  • 举报
回复
是看到这篇博文,他是设置了三个EventName="SelectedIndexChanged"分别更新州,城市和区三个DropDownList。 使用 UpdatePanel 實現 DropdownList 不刷新連動,包含設置與使用方法
引用 2 楼 istend 的回复:
不是这个问题,无效 我查了查, triggers的 EventName="SelectedIndexChanged" 貌似只能被同一个事件触发一次,可以有多个事件触发,但好像只能被多个同一个事件控制。。。 貌似
问道于旁 2014-06-12
  • 打赏
  • 举报
回复
引用 1 楼 save4me 的回复:
UpdatePanel换成下面的试一下

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="false">
不是这个问题,无效 我查了查, triggers的 EventName="SelectedIndexChanged" 貌似只能被同一个事件触发一次,可以有多个事件触发,但好像只能被多个同一个事件控制。。。 貌似

62,240

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧