我有一个下拉列表对象在我的网页。当我单击它并选择一个不同的值时,什么也没有发生,即使我有一个连接到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浏览器和ie 8浏览器上尝试了这个功能。这是从Windows Server 2003 R2机器上提供的,运行ASP。NET和。NET框架版本4。


当前回答

我知道这篇文章有点老,但我仍然想对上面的答案进行一些补充。

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

其他回答

尝试在下拉列表中设置AutoPostBack="True"。

你可以直接在下拉列表控件的SelectedIndexChanged事件中写,而不是像你写的那样。

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

添加属性ViewStateMode="Enabled"和EnableViewState="true" 和AutoPostBack="true"在drop DropDownList

我知道这篇文章有点老,但我仍然想对上面的答案进行一些补充。

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

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