2 Stimmen

OnSelectedIndexChange wird nicht ausgelöst, auch wenn autopostback=true ist.

Ok, ich bin hier ein wenig ratlos. Ich habe eine asp:Dropdownlist auf der Seite. Es wird über einen Webdienstanruf wie folgt bevölkert:

Ajax.GetSubDevelopments(developmentId, function (results) {
    var subDevelopments = $j("#<%=ddlMinorAssociation.ClientID %>");
    subDevelopments.empty();
    $j('', { value: "-1", text: "Wählen Sie einen Unterzusammenhang aus" }).appendTo(subDevelopments);
        $j.each(results, function (index, value) {
            $j('', { value: value.SubDevelopmentID, text: value.Name }).appendTo(subDevelopments);
        });
        subDevelopments.show();
    });

Die tatsächliche Steuerung sieht so aus:

Die Absicht ist, dass beim Benutzer die Auswahl eines Unterentwicklungsprojekts einen Postback auslöst und dann eine Datenliste mit Ergebnissen bindet. Jetzt wird die Seite nach dem Postback zurückgesendet, Page.Request.Params.Get("__EVENTTARGET") sagt sogar, dass sie wegen der Dropdown-Liste zurückgesendet wurde. Allerdings wird keiner des Codes in meiner ddlMinorAssociation_SelectedIndexChanged-Funktion ausgeführt. Hier ist dieser Code:

protected void ddlMinorAssociation_SelectedIndexChanged(object sender, EventArgs e)
{
    Response.Write("hi");
}

Kann mir jemand einen Einblick geben, was hier vor sich geht???

2voto

Igor Punkte 15717

Serverseite, Ihre Dropdown-Liste hat keine Elemente. Es kann das OnSelectedIndexChanged-Ereignis nicht auslösen, da sich sein Index nicht geändert hat - es hat keine Elemente, um ihm einen sinnvollen aktuellen Indexwert zu geben.

2voto

Icarus Punkte 61809

Ich glaube, das Problem hängt damit zusammen, dass beim Laden der Seite keine Elemente in der Dropdown-Liste vorhanden waren und der ViewState keine Informationen über ausgewählte Elemente hatte. Daher stellt es beim erneuten Senden fest, dass kein IndexChanged-Ereignis ausgelöst wurde.

Die Tatsache, dass es beim erneuten Senden erfolgt, liegt nur daran, dass die Autopostback-Eigenschaft auf true gesetzt ist, was im Grunde genommen einen normalen Formularversand auslöst.

Wenn Sie möchten, dass dies funktioniert, ändern Sie die Autopostback-Eigenschaft auf false und verknüpfen Sie den Code stattdessen mit dem onchange-Ereignis. Senden Sie dann einen weiteren Ajax-Request an die Methode, die auf der Serverseite ausgeführt werden soll, und binden Sie die Daten auf der Clientseite.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X