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

Foi útil?

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:

Acessando controles criados dinamicamente (C#)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top