Caricamento dinamico di controlli e persistenza in ASP.NET
-
26-09-2019 - |
Domanda
Sto caricando una serie di controlli nell'evento Page_Load.Tuttavia, devo ricreare tali controlli a ogni caricamento di pagina, il che significa archiviare i dati altrove.Questo è ingombrante.
protected void Page_Load(object sender, EventArgs e)
{
MyControl control = (MyControl)LoadControl(...);
control.Initialize(GlobalClass.controlData);
//^gives the control the data it had previously.
//Or use ViewState["controlData"] if serializable.
Controls.Add(control);
}
Sento che dovrei usarlo if (!IsPostBack) {}
, ma non so come, né perché.
Al contrario, se inserisco i controlli nel markup, i controlli sembrano rimanere persistenti.Ad esempio, un pulsante in markup ricorderà qualsiasi modifica alla sua proprietà Text (credo?).
<asp:Button ID="buttonText" runat="server"
Text="Text Segment" onclick="buttonText_Click" />
Come posso mantenere una sorta di persistenza con i controlli aggiunti dinamicamente, come i controlli aggiunti tramite markup?Ciò mi farebbe risparmiare molto lavoro e frustrazione.
Grazie.
(Ho programmato per una piccola eternità, ma più utilizzo ASP.NET, più divento confuso.Il che è esattamente il contrario di ciò che intendevo imparando a lavorare :-P.)
Soluzione
Per i controlli caricati dinamicamente, se li si carica durante l'evento Page_Init, è quindi possibile aggiungere al ViewState e saranno in grado di mantenere lo stato di postback postback.
Altri suggerimenti
Capisco il tuo punto.Sì, è complicato, ma è così che funziona una tecnologia senza stato.
Non c'è modo di ottenere lo stesso comportamento dei controlli statici (quelli che inserisci nel markup HTML).
Segui i suggerimenti che ho dato in questa risposta: