Подія 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 із версією 4 .NET Framework.

Відповіді:


399

Встановіть для AutoPostBackвластивості DropDownList значення true.

Наприклад:

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

3
Ну, це, здається, це виправило, дякую. Чи можете ви пояснити, чому?
TGP1994

2
@ TGP1994: Властивість AutoPostBack використовується для встановлення або повернення, незалежно від того, відбудеться автоматична пошта назад
В'яс Дев

2
Коли я
вибираю

20
@MuhamedShafeeq - Якщо ви заповнюєте список методом Page_Load, переконайтеся, що ви загорнули код, якщо (! IsPostback). Це запобіжить перезавантаженню списку і поверне його до першого пункту.
DaveK


44

Я знаю його трохи старший пост, але все ж я хотів би додати щось до відповідей вище.

Можливо, виникла ситуація, коли " значення " декількох елементів у випадаючому списку дублюється / однаково. Отже, переконайтеся, що у пунктах списку немає повторних значень, щоб викликати цю подію " onselectedindexchanged "


Двоє моїх значень були дублюються, і це змусило його не запустити вибрану подію, змінену в зміні, навіть незважаючи на те, що відбувся постбекшн. Дякую за це!
Майк

вибране значення випадаючого списку було нульовим у багатьох елементах. будь ласка, перевірте в запиті, що значення не є нульовим.
дінеш кумар

12

Додати об'єкт ViewStateMode="Enabled"і EnableViewState="true" А AutoPostBack="true"в краплі DropDownList


властивості ViewState не потрібні, і AutoPostBack пропонувався за кілька років відповідей до цього.
TylerH

4

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

На вкладці Консоль виберіть правильний Ціль / Кадр і перевірте властивість [Page_IsValid]

Якщо сторінка недійсна, форма не надсилатиметься, а отже, не запускає подію.


1
Проголосуйте за HerbalMart. У моєму випадку сторінка була недійсною, але через те, що я використовую Telerik RadAjaxManager на своїх сторінках, помилка не відображалася під час тестування в моєму браузері. Коли я прокоментував весь RadAjaxManager, помилка представилася, і я зміг її виправити.
користувач2721607

Це може бути корисним для людей, які мають цю проблему, але це як сказати людям, чия машина не запуститься, коли вони повернуть ключ, "переконайтесь, що ваші фари працюють, або ви не зможете побачити, коли їдете вночі". Іншими словами, це не відповідає на запитання.
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 у спадному списку, наприклад,

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

1
Тільки якщо параметр AutoEventWireup на сторінці aspx є істинним, інакше вам потрібно зробити це вручну, як в оригінальному прикладі.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.