2010-12-02 11 views
0

Ich habe eine Aspnet-Dropdown-Liste in einem Benutzersteuerelement. Diese Benutzerkontrolle wird in das Webformular geladen. Auf dieser Seite gibt es auch einen Absenden-Button. Beim Postback zeigt das selectedItem nicht den richtigen Wert im Page_load-Handler, sondern zeigt den richtigen Wert in den Pre-render- und render-Handlern. Ich hatte den Eindruck, dass der Viewstate vor page_load gesetzt ist.Dropdown.SelectedIndex hat nicht den richtigen Wert im Page_Load-Ereignis, aber hat den richtigen Wert im Render-Ereignis

+0

Was meinen Sie mit "richtigen Wert" - ist es eine Wahl des Benutzers oder was? Vielleicht könnten Sie etwas Quellcode geben? Ich habe den Eindruck, dass es sich um ein nicht standardmäßiges Szenario handelt. –

+0

Benutzerauswahl. Problem ist, es funktioniert, wenn ich eine neue Seite in einem neuen Projekt erstellen. Ich glaube, ich habe nur ein paar Hinweise darauf gesucht, was das verursachen kann. Es ist schwer für mich, den gesamten Quellcode einzuschließen, da eine Menge Vererbung vor sich geht, aber ich bin mir sicher, dass sich nichts an den Page/Control-Ereignissen anhängt, um den Viewstatus zu sabotieren. – muja

Antwort

1

Wahrscheinlich binden Sie Ihre Dropdown-Liste erneut zwischen pre_render und page_load. Genau wie das Ereignis sagt, können Sie mit pre_render Aufgaben erledigen, bevor die Steuerelemente auf Ihrer Seite gerendert wurden. Sobald Ihre Seite gerendert ist (vor page_load), wird die Dropdown-Liste mit Daten verknüpft und der ausgewählte Wert wird gelöscht.

Der einfachste Weg, dies zu umgehen, besteht darin, die Dropdownliste nur dann im Code zu binden, wenn sie gebunden werden muss, z. B. beim ersten Laden der Seite und nicht beim Zurückschreiben.

if (!IsPostBack) 
{ 
    //Do all of your data binding here 
    DataBind(); 
} 
+0

Nein, ich mache nichts, alles ist auf der Ascx Designseite deklariert. – muja

+0

Ich habe den Lebenszyklus rückwärts. Überprüfen Sie dies, http://msdn.microsoft.com/en-us/library/aa479007.aspx – Noah

1

Hier ist die Lösung, die am besten zu empfehlen ist. Es liegt in Verstehen der Seite Life Cycle korrekt! Postback Controls wie Drop Down List stellen ihren gebuchten Status wieder her (der ausgewählte Artikel einer Drop-Down-Liste). Er vergisst seinen ausgewählten Wert, da Sie ihn im Page_Load-Ereignis erneut binden, nachdem die Dropdownliste mit dem gebuchten Wert geladen wurde (da der Ansichtszustand nach dem Page_Init-Ereignis und vor dem Page_Load-Ereignis geladen wird). Und beim erneuten Binden des Page_Load-Ereignisses vergißt die Dropdown-Liste das wiederhergestellte ausgewählte Objekt. Die beste Lösung besteht darin, die Datenbindung im Page_Init-Ereignis statt im Page_Load-Ereignis durchzuführen.

so etwas wie die unten tun ...

Angenommen Dropdown-Liste Name lstStates ist.

protected void Page_Init(object sender, EventArgs e) 
{ 
    lstStates.DataSource = QueryDatabase(); //Just an example. 
    lstStates.DataTextField = "StateName";  
    lstStates.DataValueField = "StateCode"; 
    lstStates.DataBind(); 
} 

ASP.NET Lasten Kontrolle des Anzeigestatus nach Page_Init Ereignis und vor dem Ereignis Page Load, so selectedIndex der Drop-Down-Liste werden nicht betroffen sein, und Sie werden die Ergebnisse auf magische Weise erhalten erwünscht !!

Verwandte Themen