View Full Version : PostBack e inicializaçoes de classes


Galbne_PT
17-04-2007, 20:39
Boas ppl,

Vou expor um problema que até um noob descobria, mas eu estou à nora com isto.
Estou a começar a desenvolver uma pequena aplicação de em asp.net para gerir clientes. O que se passa é tenho programado mt em windows forms e em c# e informaram que o asp.net 2.0 em c# é mt parecido e até se aproveita as classes, eu contente com essa informação, vamos a por ao trabalha. mas agora deixando de palavriado e passar ao problema.

Tenho um classe Clients e "gera" o cliente, no evento de iniciar o pagina Default.aspx tenho private Clients clients;

protect void page..()
{
if (!page.ispostback) clientes = new clients();

label.text = clients.dateofbirth
}Tenho nas informações a data de nascimento do cliente, ora o que eu quero fazer é alterar essa data de nascimento, mas qd eu carrego no botao de alterar ele faz o processo td mas ao iniciar a pagina ele dá erro a dizer que clients nao foi inicializada.
Há alguma maneira de manter a class inicializada após um postback? Têm alguma sugestão para este problema?

Cumps

SoundSurfer
17-04-2007, 21:35
"Há alguma maneira de manter a class inicializada após um postback?"

Há, guardando na Sessão, mas não é suposto ser usado para casos destes, se bem percebi o problema.

Apesar da linguagem ser a mesma, o Windows.Forms é bastante diferente do ASP.NET, principalmente na forma de pensar e de abordar os vários problemas.
Tens de pensar que o HTTP de base não guarda nenhum contexto entre pedidos, logo, cada página tem quase sempre de inicializar as suas variáveis quando é chamada.

Expõe melhor o teu problema.

Deves começar por perceber o "Page Life Cycle" do ASP.NET, por exemplo aqui (http://msdn2.microsoft.com/en-us/library/ms178472.aspx).

Galbne_PT
18-04-2007, 12:16
Boas, Obrigado SoundSurfer,

Pois já quem me informou tb não sabe mt do assunto ta visto, mas pronto... mas agora tenho de fazer :(.
O que eu pensava que se podia fazer era manter a classe inicializada, alterar valores na classe e só depois por exemplo enviar os dados da classe para a base de dados, mesmo fazendo o postback, pelo k vi do url k mandaste não dá :P

A solução que arrangei é mesmo usar a classe iniciada e por em Session.

O problema é : tenho um campo da data, qd carrego no botao mostra o calendario, cada vez que carrego no calendario ele faz o postback, entretanto tenho o event de cada click no calendario atribui a data seleccionada na classe, mas a data não aparece! só aparece se fizer outro postback. isso com a inicializacao da classe em Session.

Agora há alternativas? ou tenho de pensar de outra maneira? Conhecem alguns tutorials com esse tipos de exemplos.

Cumps

SoundSurfer
18-04-2007, 15:47
Uma dica: tenta não pôr a classe no Session. Experimenta por exemplo guardar valores entre request com campos escondidos... por exemplo asp:HiddenField ... o valor dos campos é automaticamente inicializado pelo asp.net quando fazes o PostBack, tens é de ver em que faze do ciclo de vida é que ele faz isso.

Outra alternativa é guardar os dados no ViewState... isto tudo porque a Session é partilhada pelas várias janelas do browser...

Galbne_PT
19-04-2007, 14:48
Outra alternativa é guardar os dados no ViewState... isto tudo porque a Session é partilhada pelas várias janelas do browser...

Optei entao por pôr no ViewState e utilizo o AJAX para tirar o "efeito de Reload" do postback...

Parece que fica bem...

Obrigado