DropDownList的SelectedIndexChanged事件未触发


196

我的网页中有一个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计算机提供的,该计算机运行带有.NET Framework版本4的ASP.NET。

Answers:


399

将DropDownList AutoPostBack属性设置为true。

例如:

<asp:DropDownList ID="logList" runat="server" AutoPostBack="True" 
        onselectedindexchanged="itemSelected">
    </asp:DropDownList>

3
好吧,这似乎已经解决了,谢谢。你能解释为什么吗?
TGP1994 '02

2
@ TGP1994:AutoPostBack属性用于设置或返回是否发生自动回发
Vyas Dev

2
当选择下拉列表时,它将转到列表的第一个值
Muhamed Shafeeq 2012年

20
@MuhamedShafeeq-如果要在Page_Load方法中填充列表,请确保将代码包装在if(!IsPostback)中。这样可以防止它重新加载列表并将其设置回第一项。
DaveK 2014年


44

我知道它的帖子比较旧,但是我仍然想对上面的答案进行总结。

在某些情况下,下拉列表中多个项目的“ ”将重复/相同。因此,请确保列表项中没有重复的值来触发此“ onselectedindexchanged ”事件


我的两个值重复,这导致即使发生回发,它也不会触发onselectedindexchanged事件。谢谢你!
迈克

下拉列表的选定值在许多项目中为空。请检查查询值是否不为null。
dinesh kumar

12

添加属性ViewStateMode="Enabled"EnableViewState="true" 然后AutoPostBack="true"在DropdropList中添加


不需要ViewState属性,并且在此问题之前的几年中,在多个答案中都建议使用AutoPostBack。
TylerH

4

还要确保页面有效。您可以在浏览器开发人员工具(F12)中进行检查

在控制台选项卡中,选择正确的目标/框架,然后检查[Page_IsValid]属性

如果页面无效,则表单不会提交,因此不会触发该事件。


1
投票支持HerbalMart。就我而言,该页面无效,但是因为我在页面上使用了Telerik RadAjaxManager,所以在浏览器中进行测试时未显示错误。当我注释掉整个RadAjaxManager时,错误出现了,并且可以修复它。
user2721607

这可能会对有问题的人有所帮助,但这就像告诉人们在转动钥匙时其汽车将不会启动的人“请确保您的前灯正常工作,或者晚上开车时您看不见”。换句话说,这不能回答所提出的问题。
TylerH

2

对我来说,答案是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>

1

除了编写的内容外,还可以直接在dropdownlist控件的SelectedIndexChanged事件中编写它,例如

protected void ddlleavetype_SelectedIndexChanged(object sender, EventArgs e)
{
 //code goes here
}

1
仅当aspx页面上的AutoEventWireup设置为true时,否则,按照原始示例,您需要手动进行设置。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.