Nella mia applicazione ASP.NET, sto caricando un .ascx utilizzando in modo dinamico LoadControl, utilizzando il seguente schema:Viewstate di ascx perde tra i postback
var ctrl = LoadControl("/path/to/control.ascx");
((ControlType)ctrl).SomeProperty = someData;
placeholder.Controls.Add(ctrl);
Il controllo che aggiungo salva il valore della proprietà SomeProperty direttamente a ViewState, come segue:
public int? SomeProperty
{
get { return (int?)ViewState["SomeProperty"]; }
set { ViewState["SomeProperty"] = value; }
}
Dopo di che, il controllo ascx vive una vita da solo e tutto va bene finché non si verifica postback. Quando la pagina torna indietro, improvvisamente lo stato della vista è vuoto! Sospetto che ciò accada perché manipolo il ViewState prima di aggiungere l'ascx istanziata alla mia pagina. Inoltre, posso evitare che il ViewState di perdersi aggiungendo la seguente riga nel metodo del mio controllo ascx Page_Load()
:
SomeProperty = SomeProperty;
devo fare quanto sopra per ogni proprietà per garantire che il ViewState è conservato. Ora, c'è un modo più carino per farlo? Manipolare il ViewState dopo che l'hash istante è stato aggiunto alla pagina non è un'opzione - Ho bisogno del contenuto di ViewState nei metodi Page_Init()
e Page_Load()
, che vengono attivati nell'istante in cui aggiungo l'.ascx alla mia pagina.
Grazie.
Ho riscontrato un problema simile una volta, e nel mio caso il problema era che nel nostro tavolo di tutti i tempi, abbiamo impostato tutti i controlli su non utilizzare viewstate. Il mio punto è che aggiungere controlli dinamicamente potrebbe non essere necessariamente il problema, ma luoghi nascosti in cui viewstate è disabilitato. –