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

TGP1994
источник

Ответы:

399

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

Например:

<asp:DropDownList ID="logList" runat="server" AutoPostBack="True" 
        onselectedindexchanged="itemSelected">
    </asp:DropDownList>
Вьяс Дев
источник
3
Ну, это, кажется, исправило это, спасибо. Вы можете объяснить, почему?
TGP1994
2
@ TGP1994: свойство AutoPostBack используется для установки или возврата того, происходит ли автоматическая обратная запись
Vyas Dev
2
Когда я выбираю выпадающий список, он переходит к первому значению списка
Мухаммед Шафик
20
@MuhamedShafeeq - если вы заполняете список в методе Page_Load, убедитесь, что вы заключили код в if (! IsPostback). Это предотвратит перезагрузку списка и возврат к первому элементу.
DaveK
78

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

Скрам Мейстер
источник
44

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

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

4u.Ans
источник
Два из моих значений были продублированы, и это привело к тому, что оно не вызвало событие onselectedindexdered, даже если произошла обратная передача. Спасибо за это!
Майк
выбранное значение раскрывающегося списка во многих элементах было нулевым. пожалуйста, проверьте в запросе, что значение не является нулевым.
Динеш Кумар
12

Добавить объект ViewStateMode="Enabled"и EnableViewState="true" А AutoPostBack="true"в капле DropDownList

Дилип Кр Сингх
источник
свойства ViewState не нужны, и AutoPostBack предлагался в нескольких ответах за годы до этого.
TylerH
4

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

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

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

HerbalMart
источник
1
Голосование за HerbalMart. В моем случае страница была недействительной, но из-за того, что я использую Telerik RadAjaxManager на своих страницах, ошибка не отображалась при тестировании в моем браузере. Когда я закомментировал весь RadAjaxManager, ошибка появилась, и я смог ее исправить.
user2721607
Это может быть полезно для людей, имеющих такую ​​проблему, но это все равно, что говорить людям, чья машина не заводится, когда они поворачивают ключ, «убедитесь, что фары работают, или вы не сможете видеть во время вождения ночью». Другими словами, это не отвечает на задаваемый вопрос.
TylerH
3

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

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

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