Ich habe eine Benutzerkontrolle, die this.ViewState["Key"] = SomeValue
verwendet. Der größte Teil davon wird von meinem Page_Init() geladen:Warum ist ViewState in meinem Benutzersteuerelement teilweise gespeichert?
protected void Page_Init(object sender, EventArgs e)
{
if(!IsPostBack)
{
ViewState["Blahblah"] = LoadSomeValue();
}
}
Der Rest wird an verschiedenen Punkten eingestellt.
Aber aus irgendeinem Grund ist es bei späteren Postbacks nicht verfügbar. Ich überprüfte SaveViewState(), um zu überprüfen, und nur wie drei von ihnen gespeichert werden!
protected override object SaveViewState()
{
List<object> viewStateObjectsBefore = ViewState.OfType<object>().ToList();
object ret = base.SaveViewState();
List<object> viewStateObjectsAfter = ViewState.OfType<object>().ToList();
GC.KeepAlive(viewStateObjectsBefore);
GC.KeepAlive(viewStateObjectsAfter);
GC.KeepAlive(ret);
return ret;
}
Sowohl viewStateObjectsBefore
und viewStateObjectsAfter
enthalten 10 Schlüssel/Wert-Paare, aber ret
enthält nur drei!
Hinzugefügt: die Initialisierungen Page_Load()
Umzug ist nicht leicht verfügbare Option, da die Initialisierungen vor dem Page_Load()
ausführt der Eltern getan werden muss.