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 事件未触发的主要内容,如果未能解决你的问题,请参考以下文章

【JS】如何更改dropdownlist 当前选定值

怎么用js来控制dropdownlist

gridview中用dropdownlist更改值来筛选,更改dropdownlist之后无法进行checkbox选择

C#如何dropdownlist赋值

js获取和设置dropdownlist的选定项

如何根据其他DropDownList的选择进行多个DropDownList更改