Como aceder ao viewstate através de uma classe quando não podemos passar uma referência da mesma

Tive recentemente um problema ao tentar manter uma datatable no viewstate. Tudo seria fácil se apenas tivesse que aceder ao viewstate de dentro da classe da própria página. Infelizmente esse não foi o caso. O que eu fiz foi criar uma classe que seria usada como business object (ou por outras palavras como source para um object datasource). Infelizmente como a instância da minha classe é criada pelo póprio objectdatasource não tenho como passar à minha classe uma instância do viewstate da página (ou de qualquer outro controlo). Após alguma análise com o reflector deu para perceber que o viewstate é herdado do webcontrol e que é protected, o que significa que só é acessível internamente por uma classe que herde do webcontrol. Assim o que fiz foi, em primeiro lugar, criar uma classe que herda de System.Web.UI.Page e fazer um shadow da propriedade viewstate para tornar a mesma pública. Em seguida dentro da classe que serve de business object fui buscar a instância da página actual através da classe httpcontext.current.currenthandler e converti para a minha classe que deriva da System.Web.UI.Page para assim obter o viewstate que me permitiu gravar a datatable entre postbacks. Se alguém se deparar com o mesmo erro estou disposto a mostrar alguns exemplos. Entretanto espero que isto poupe algumas horas a alguem pois a mim certamente o teria feito. Isto só porque teimei em não gravar a datatable na session para não ocupar memória :p
Filed under:

Comments

# Israel Aéce said:

Ola Helder,

O problema que vejo neste caso é com relação ao objeto que está tendo persistir no ViewState. Colocar um DataTable no ViewState me parece um tanto quanto custoso, pois aumentaria consideravelmente o conteúdo enviado e retorno para o cliente.

Talvez, se for o caso, poderia persistir o DataTable em Cache, que teria um melhor rendimento.

segunda-feira, 29 de Junho de 2009 3:32
# Anonymous said:

Sim eu sei que fica um pouco mais pesado. Mas no caso concreto usei esta método para um cms. Mais concretamente para adicionar um novo serviço.

Para ser sincero penso que nem num ano a empresa que pediu o site vai usar o cms para adicionar novos serviços por isso não tenho problemas com um viewstate mais pesado numa página que pouco vai ser acedida (no total a página já com o viewstate pesa uns 28k). Para além do mais estou a usar as extensões AJAX por isso é tudo bastante rápido.

Tenho pena de não poder mostrar a utilização concreta, mas afinal trata-se de um cms :p

quarta-feira, 1 de Julho de 2009 2:23
# Anonymous said:

Helder, teria como me mandar um exemplo de como fazer isso?
meu e-mail é cedes01@edza.com.br

quarta-feira, 1 de Julho de 2009 2:23
# Anonymous said:

Sim eu sei que fica um pouco mais pesado. Mas no caso concreto usei esta método para um cms. Mais concretamente para adicionar um novo serviço.

Para ser sincero penso que nem num ano a empresa que pediu o site vai usar o cms para adicionar novos serviços por isso não tenho problemas com um viewstate mais pesado numa página que pouco vai ser acedida (no total a página já com o viewstate pesa uns 28k). Para além do mais estou a usar as extensões AJAX por isso é tudo bastante rápido.

Tenho pena de não poder mostrar a utilização concreta, mas afinal trata-se de um cms :p

quinta-feira, 2 de Julho de 2009 2:21
# Anonymous said:

Helder, teria como me mandar um exemplo de como fazer isso?
meu e-mail é cedes01@edza.com.br

quinta-feira, 2 de Julho de 2009 2:21
# Weliton Vieira said:

Olá Helder,

você poderia mandar um exemplo da sua solução ? estou tendo o mesmo problema.

Desde já gradeço!

E-mail: welitonjunior@inbox.com

sexta-feira, 19 de Março de 2010 20:17
# Michel said:

Helder, boa tarde.

Estou tendo o mesmo problema que você, quero persistir um DataTable usando ViewState e ObjectDataSource. Li seus comentários, mas ainda não sei como fazer.

Você poderia me mandar um exemplo por e-mail, por favor?

michelg@click21.com.br

Desde já agradeço.

Um abraço.

sábado, 29 de Maio de 2010 16:18
# Fabio said:

Estou este problema de vies statis!

Queria ver um exemplo do codigo por ser?

terça-feira, 23 de Agosto de 2011 0:31

Leave a Comment

(requerido) 
(requerido) 
(opcional)
(requerido) 
If you can't read this number refresh your screen
Enter the numbers above: