DropDownList 的 SelectedIndexChanged 事件未触发
Posted
技术标签:
【中文标题】DropDownList 的 SelectedIndexChanged 事件未触发【英文标题】:DropDownList's SelectedIndexChanged event not firing 【发布时间】:2011-06-21 18:46:18 【问题描述】:我的网页中有一个 DropDownList 对象。当我点击它并选择一个不同的值时,没有任何反应,即使我有一个连接到SelectedIndexChanged
事件的函数。
首先,实际对象的 html 代码:
<asp:DropDownList ID="logList" runat="server"
onselectedindexchanged="itemSelected">
</asp:DropDownList>
这就是那个函数,itemSelected
:
protected void itemSelected(object sender, EventArgs e)
Response.Write("Getting clicked; " + sender.GetType().ToString());
FileInfo selectedfile;
Response.Write("<script>alert('Hello')</script>");
foreach (FileInfo file in logs)
if (file.Name == logList.Items[logList.SelectedIndex].Text)
Response.Write("<script>alert('Hello')</script>");
没有任何响应出现,并且 javascript 的那部分永远不会运行。我已经在最新的 3.6 版本的 Firefox 以及 Internet Explorer 8 上进行了尝试。这是由 Windows Server 2003 R2 机器提供的,运行 ASP.NET 和 .NET Framework 版本 4。
【问题讨论】:
【参考方案1】:尝试在 DropDownList 上设置 AutoPostBack="True"
。
【讨论】:
【参考方案2】:将 DropDownList AutoPostBack
属性设置为 true。
例如:
<asp:DropDownList ID="logList" runat="server" AutoPostBack="True"
onselectedindexchanged="itemSelected">
</asp:DropDownList>
【讨论】:
嗯,这似乎已经解决了,谢谢。你能解释一下为什么吗? @TGP1994 :AutoPostBack 属性用于设置或返回是否发生自动回发 在选择下拉列表时,它将到列表 span>的第一个值 @MuhamedShafeeq - 如果您在 Page_Load 方法中填充列表,请确保将代码包装在 if(!IsPostback) 中。这将防止它重新加载列表并将其设置回第一项。【参考方案3】:我知道它有点旧的帖子,但我仍然想在上面的答案中添加一些东西。
在某些情况下,下拉列表中多个项目的“值”重复/相同。因此,请确保列表项中没有重复值来触发此“onselectedindexchanged”事件
【讨论】:
我的两个值重复了,这导致即使回发发生,它也不会触发 onselectedindexchanged 事件。谢谢! 下拉列表的选定值在许多项目中为空。请检查该值不为空的查询。【参考方案4】:不用自己写的,直接写在下拉列表控件的SelectedIndexChanged事件中,例如
protected void ddlleavetype_SelectedIndexChanged(object sender, EventArgs e)
//code goes here
【讨论】:
只有在aspx页面的AutoEventWireup设置为真时,否则需要手动进行,按照原例。【参考方案5】:添加属性ViewStateMode="Enabled"
和EnableViewState="true"
而AutoPostBack="true"
在下拉下拉列表中
【讨论】:
不需要 ViewState 属性,并且在此之前几年的多个答案中建议使用 AutoPostBack。【参考方案6】:对我来说答案是 aspx 页面属性,我将 Async="true" 添加到页面属性中,这解决了我的问题。
<%@ Page Language="C#" MasterPageFile="~/MasterPage/Reports.Master".....
AutoEventWireup="true" Async="true" %>
这是我的更新面板的结构
<div>
<asp:UpdatePanel ID="updt" runat="server">
<ContentTemplate>
<asp:DropDownList ID="id" runat="server" AutoPostBack="true" onselectedindexchanged="your server side function" />
</ContentTemplate>
</asp:UpdatePanel>
</div>
【讨论】:
【参考方案7】:还要确保页面有效。 您可以在浏览器开发者工具 (F12) 中查看此内容
在控制台选项卡中选择正确的目标/框架并检查 [Page_IsValid] 属性
如果页面无效,表单将不会提交,因此不会触发事件。
【讨论】:
对 HerbalMart 投赞成票。在我的情况下,页面无效,但是因为我在页面上使用了 Telerik RadAjaxManager,所以在我的浏览器中测试时没有显示错误。当我注释掉整个 RadAjaxManager 时,错误就出现了,我能够修复它。 这可能对有这个问题的人有帮助,但这就像告诉那些在转动钥匙时不会启动汽车的人“确保你的前灯工作,否则你将无法看到什么时候晚上开车”。换句话说,这并不能回答所提出的问题。 @TylerH 我的回答是解决同样的问题。 '事件没有触发' 接受的答案在服务器端解决了它。但问题也可能出在客户端“页面无效”上。就我而言,它是客户端,所以我分享了我的经验。如您所见,它还帮助了一些人。以上是关于DropDownList 的 SelectedIndexChanged 事件未触发的主要内容,如果未能解决你的问题,请参考以下文章