Auch wenn DropDownList sein viestate deaktiviert ist, sollte SelectedValue immer noch einen Wert zurückgeben

8

Ich glaube, ich verstehe ViewState ziemlich gut, aber das folgende gibt mir einige Schwierigkeiten:

Von Ссылка

  

Postback-Steuerelemente wie Dropdown-Liste und Textbox stellen ihren Posted-Status wieder her (das ausgewählte Element eines Dropdown-Feldes ist "gepostet"), selbst wenn ViewState deaktiviert ist, da das Steuerelement selbst bei deaktiviertem ViewState seinen Wert noch veröffentlichen kann


Angenommen, DropDownList hat EnableViewState auf false gesetzt, dann (gemäß dem obigen Zitat), wenn der Benutzer ein Postback durch Auswählen eines Elements in DropDownList sollte der folgende Code dazu führen, dass Label1.Text den Wert eines ausgewählten Elements anzeigt (also sollte DropDownList.SelectedValue einen vom Benutzer ausgewählten Wert zurückgeben, auch wenn viewstate deaktiviert ist ), aber stattdessen bekomme ich eine leere Zeichenfolge:

%Vor%


Der Autor dieses Artikels scheint ein Experte auf diesem Gebiet zu sein, also gehe ich davon aus, dass ich etwas falsch mache!?!


danke

    
SourceC 07.06.2009, 21:40
quelle

2 Antworten

17

Es gibt keinen ausgewählten Wert, weil:

1) Es gibt keine Einträge in der Auswahlliste, da Sie die Daten nur beim ersten Mal binden. Normalerweise ist dies eine gute Vorgehensweise, aber wenn ViewState deaktiviert ist, müssen Sie die Daten für das Steuerelement jedes Mal explizit neu erstellen.

2) Sie binden die Daten nach dem Punkt im Seitenlebenszyklus, in dem die Request-Dictionary-Werte auf Steuerelemente angewendet werden (nämlich während der Wiederherstellung von ViewState auf Steuerelemente). Der gebuchte Wert existiert im Request-Dictionary, aber da sind keine Einträge in der Dropdown-Liste, es kann nicht wirklich viel damit anfangen. Auch wenn ViewState deaktiviert ist, ist Ihr Autor korrekt - der veröffentlichte Wert wird angewendet, an dem Punkt im Lebenszyklus, an dem ViewState normalerweise angewendet würde.

Wenn Sie die Daten für die Liste in Init () neu erstellen würden, würde die Dropdown-Liste für den gebuchten Wert gefüllt werden, der angewendet werden würde, und der ausgewählte Wert wäre zu der Zeit verfügbar Du hast Load (). Hoffentlich ist das klar. Einige Arbeitscode ist unten:

%Vor%     
womp 08.06.2009, 01:03
quelle
1

Hier ist eine viel schlauere DropDownList-Implementierung. Nicht um Troll oder so etwas, aber ich kann nicht glauben, wie begrenzt (lest: dumm) einige der ASP.Net-Steuerelemente sind ....

%Vor%     
Josh Mouch 28.08.2009 12:27
quelle

Tags und Links