Controles de carga dinamicamente e persistência no ASP.NET
-
26-09-2019 - |
Pergunta
Estou carregando uma série de controles no evento Page_load. No entanto, tenho que recriar esses controles cada carga de página, o que significa armazenar seus dados em outros lugares. Isso é complicado.
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);
}
Eu sinto que deveria estar usando if (!IsPostBack) {}
, mas não sei como, ou por quê.
Por outro lado, se eu colocar os controles na marcação, os controles parecem permanecer persistentes. Por exemplo, um botão no Mark-up se lembrará de alguma alteração em sua propriedade de texto (eu acho?).
<asp:Button ID="buttonText" runat="server"
Text="Text Segment" onclick="buttonText_Click" />
Como mantenho algum tipo de persistência com controles adicionados dinamicamente, como controles adicionados via marcação? Isso me pouparia muito trabalho e frustração.
Obrigado.
(Codifiquei para uma pequena eternidade, mas quanto mais eu faço asp.net, mais confuso me torno. Qual é exatamente o oposto de como eu entendi aprender a funcionar: p.)
Solução
Para controles carregados dinamicamente, se você os carregar durante o evento Page_init, poderá adicioná -los ao ViewState e eles poderão reter o estado de postagem para postagem.
Outras dicas
Eu entendo seu ponto. Sim, isso é complicado, mas é assim que uma tecnologia apátrida funciona.
Não há como alcançar o mesmo bahaviour de controles estáticos (os que você coloca na marcação HTML).
Siga as dicas que dei nesta resposta: