Das SelectedIndexChanged-Ereignis von DropDownList wird nicht ausgelöst


196

Ich habe ein DropDownList-Objekt auf meiner Webseite. Wenn ich darauf klicke und einen anderen Wert auswähle, passiert nichts, obwohl ich eine Funktion habe, die mit dem SelectedIndexChangedEreignis verbunden ist.

Zunächst der HTML-Code des eigentlichen Objekts:

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

Und das ist diese Funktion 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>");
        }
    }
}

Keine der Antworten wird angezeigt, und dieser Teil von JavaScript wird niemals ausgeführt. Ich habe dies auf der neuesten Version 3.6 von Firefox sowie auf Internet Explorer 8 versucht. Dies wird von einem Windows Server 2003 R2-Computer bereitgestellt, auf dem ASP.NET mit .NET Framework Version 4 ausgeführt wird.

Antworten:


399

Setzen Sie die DropDownList- AutoPostBackEigenschaft auf true.

Z.B:

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

3
Nun, das scheint es behoben zu haben, danke. Kannst du erklären warum?
TGP1994

2
@ TGP1994: Die AutoPostBack-Eigenschaft wird verwendet, um festzulegen oder zurückzugeben, ob eine automatische Rückmeldung erfolgt oder nicht
Vyas Dev

2
Wenn ich Dropdown-Liste auswähle, wird der erste Wert der Liste
angezeigt

20
@MuhamedShafeeq - Wenn Sie die Liste in der Page Load-Methode füllen, stellen Sie sicher, dass Sie den Code in if (! IsPostback) einschließen. Dadurch wird verhindert, dass die Liste neu geladen und auf das erste Element zurückgesetzt wird.
DaveK


44

Ich kenne den etwas älteren Beitrag, möchte aber trotzdem etwas zu den obigen Antworten hinzufügen.

Es kann vorkommen, dass der " Wert " von mehr als einem Element in der Dropdown-Liste doppelt vorhanden ist. Stellen Sie daher sicher, dass die Listenelemente keine wiederholten Werte enthalten, um dieses Ereignis " onselectedindexchanged " auszulösen


Zwei meiner Werte wurden dupliziert, was dazu führte, dass das Ereignis onselectedindexchanged nicht ausgelöst wurde, obwohl das Postback stattfand. Danke dafür!
Mike

Der ausgewählte Dropdown-Wert war in vielen Elementen null. Bitte überprüfen Sie in der Abfrage, dass der Wert nicht null ist.
Dinesh Kumar

12

Fügen Sie die Eigenschaft ViewStateMode="Enabled"und EnableViewState="true" And AutoPostBack="true"in drop DropDownList hinzu


Die ViewState-Eigenschaften werden nicht benötigt, und das AutoPostBack wurde Jahre zuvor in mehreren Antworten vorgeschlagen.
TylerH

4

Stellen Sie außerdem sicher, dass die Seite gültig ist. Sie können dies in den Entwicklertools des Browsers überprüfen (F12).

Wählen Sie auf der Registerkarte Konsole das richtige Ziel / den richtigen Frame aus und suchen Sie nach der Eigenschaft [Page_IsValid]

Wenn die Seite nicht gültig ist, wird das Formular nicht gesendet und das Ereignis daher nicht ausgelöst.


1
Up Abstimmung für HerbalMart. In meinem Fall war die Seite ungültig, aber da ich den Telerik RadAjaxManager auf meinen Seiten verwende, wurde der Fehler beim Testen in meinem Browser nicht angezeigt. Als ich den gesamten RadAjaxManager auskommentierte, trat der Fehler auf und ich konnte ihn beheben.
user2721607

Das mag für Menschen mit diesem Problem hilfreich sein, aber das ist so, als würde man Leuten sagen, deren Auto beim Drehen des Schlüssels nicht anspringt. "Stellen Sie sicher, dass Ihre Scheinwerfer funktionieren oder Sie nachts nicht sehen können." Mit anderen Worten, dies beantwortet nicht die gestellte Frage.
TylerH

2

Für mich war die Antwort aspx Seitenattribut, ich fügte Async = "true" zu Seitenattributen hinzu und dies löste mein Problem.

<%@ Page Language="C#" MasterPageFile="~/MasterPage/Reports.Master"..... 
    AutoEventWireup="true" Async="true" %>

Dies ist die Struktur meines Update-Panels

<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

Anstelle dessen, was Sie geschrieben haben, können Sie es direkt in das SelectedIndexChanged-Ereignis des Dropdown-Listensteuerelements schreiben, z

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

1
Nur wenn die AutoEventWireup-Einstellung auf der aspx-Seite wahr ist, andernfalls müssen Sie dies manuell tun, wie im Originalbeispiel angegeben.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.