Событие DropDownList SelectedIndexChanged не запускается

У меня есть объект 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 никогда не запускается. Я пробовал это в последней версии Firefox 3.6, а также в Internet Explorer 8. Он обслуживается с компьютера Windows Server 2003 R2, на котором запущен ASP.NET с .NET Framework версии 4.


person TGP1994    schedule 05.02.2011    source источник


Ответы (7)


Установите для свойства DropDownList AutoPostBack значение true.

Eg:

<asp:DropDownList ID="logList" runat="server" AutoPostBack="True" 
        onselectedindexchanged="itemSelected">
    </asp:DropDownList>
person Vyasdev Meledath    schedule 05.02.2011
comment
Что ж, похоже, это исправило, спасибо. Вы можете объяснить почему? - person TGP1994; 05.02.2011
comment
@ TGP1994: свойство AutoPostBack используется для установки или возврата, происходит ли автоматическая обратная отправка. - person Vyasdev Meledath; 07.02.2011
comment
Когда я выбираю раскрывающийся список, он переходит к первому значению списка - person Muhamed Shafeeq; 26.09.2012
comment
@MuhamedShafeeq - если вы заполняете список в методе Page_Load, убедитесь, что вы заключили код в if (! IsPostback). Это предотвратит перезагрузку списка и возврат к первому элементу. - person DaveK; 24.06.2014

попробуйте установить AutoPostBack="True" в DropDownList.

person The Scrum Meister    schedule 05.02.2011

Я знаю его немного более старый пост, но все же я хотел бы добавить что-то к приведенным выше ответам.

Возможна ситуация, когда "значение" нескольких элементов в раскрывающемся списке дублируется / одинаково. Итак, убедитесь, что у вас нет повторяющихся значений в элементах списка для запуска этого события «onselectedindexchanged».

person 4u.Ans    schedule 07.03.2012
comment
Два моих значения были дублированы, и это заставляло его не запускать событие onselectedindexchanged, даже если происходила обратная передача. Спасибо за это! - person Mike; 13.01.2019
comment
выбранное значение раскрывающегося списка имело нулевое значение во многих элементах. пожалуйста, проверьте в запросе, что значение не равно нулю. - person dinesh kumar; 02.01.2020

Добавьте свойство ViewStateMode="Enabled" и EnableViewState="true" И AutoPostBack="true" в выпадающий список DropDownList

person Dilip Kr Singh    schedule 10.10.2013
comment
свойства ViewState не нужны, и AutoPostBack предлагался в нескольких ответах за годы до этого. - person TylerH; 12.03.2020

Также убедитесь, что страница действительна. Вы можете проверить это в инструментах разработчика браузеров (F12).

На вкладке «Консоль» выберите правильный целевой объект / фрейм и проверьте свойство [Page_IsValid].

Если страница недействительна, форма не будет отправлена ​​и, следовательно, не запустит событие.

person HerbalMart    schedule 24.10.2016
comment
Голосовать за HerbalMart. В моем случае страница была недействительной, но поскольку я использую Telerik RadAjaxManager на своих страницах, ошибка не отображалась при тестировании в моем браузере. Когда я закомментировал весь RadAjaxManager, ошибка возникла сама собой, и я смог ее исправить. - person user2721607; 26.07.2017
comment
Это может быть полезно для людей, у которых есть такая проблема, но это все равно, что говорить людям, чья машина не заводится, когда они поворачивают ключ, убедитесь, что ваши фары работают, иначе вы не сможете видеть, когда едете ночью. Другими словами, это не отвечает на заданный вопрос. - person TylerH; 12.03.2020
comment
@TylerH Мой ответ - решение той же проблемы. «Событие не срабатывает» Принятый ответ решает проблему на стороне сервера. Но проблема также может быть в "недействительной странице" на стороне клиента. В моем случае это была клиентская сторона, поэтому я поделился своим опытом. Как видите, это тоже помогло некоторым людям. - person HerbalMart; 01.05.2021

Для меня ответом был атрибут страницы 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>
person Justin F    schedule 26.07.2016

Вместо того, что вы написали, вы можете записать это непосредственно в событии SelectedIndexChanged элемента управления dropdownlist, например

protected void ddlleavetype_SelectedIndexChanged(object sender, EventArgs e)
{
 //code goes here
}
person user2541273    schedule 02.07.2013
comment
Только если параметр AutoEventWireup на странице aspx имеет значение true, в противном случае вам нужно сделать это вручную, как в исходном примере. - person ; 18.03.2015