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.)

È stato utile?

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:

Accesso ai controlli creati dinamicamente (c#)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top