【问题标题】:DropDownList's SelectedIndexChanged event not firingDropDownList 的 SelectedIndexChanged 事件未触发
【发布时间】: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。

【问题讨论】:

    标签: asp.net drop-down-menu selectedindexchanged


    【解决方案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 我的回答是解决同样的问题。 '事件没有触发' 接受的答案在服务器端解决了它。但问题也可能出在客户端“页面无效”上。就我而言,它是客户端,所以我分享了我的经验。如您所见,它还帮助了一些人。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多