Pergunta

Aqui estão as noções básicas de minha configuração:

Eu tenho uma classe BasePage que herda de System.Web.UI.Page. BasePage tem duas propriedades implementadas tal que o seu get / set o faz a partir de dois itens diferentes na coleção ViewState (ex this.ViewState [ ""] ano do BasePage).

Eu tenho outra classe que herda então a partir BasePage, vamos chamá-lo SpecificBasePage.

Finalmente, eu tenho uma página aspx que herda SpecificBasePage.

Eu adicionei break points e muito stepping feito através de meu código e descobriram que no carregamento da página inicial, tanto das minhas propriedades estado de exibição são atribuídos valores e os valores persistem ao longo do primeiro ciclo página vida de carga.

Quando a página é enviada de volta no entanto, durante o evento Page_Load e outros manipuladores de eventos (quando o ViewState devem ser carregados), ambas as propriedades retornar nulo. Inspecionando this.ViewState.Count mostra que há zero objetos na coleção.

Alguém pode pensar em algo que eu poderia estar fazendo algum lugar que efetuaria o ViewState e causar esse comportamento?

- Adição Isolei-lo para uma parte do meu código. Sobre a carga inicial, eu dou os valores de propriedades viewstate em OnInit, eu descobri que quando eu passar isso para OnLoad, os valores persistem em todo o posto de volta. Eu acho que mesmo que os valores de estado de exibição adicionadas persistir ao longo do ciclo de vida página inicial, são abandonados no posto de volta?

Foi útil?

Solução

As páginas podem ter EnableViewState = false no aspx

Também pode ser desativada no web.config da aplicação, ou mesmo para o computador global sobre o elemento.

Update 1: No ciclo de vida do asp.net, ViewState é carregado após Init, e antes de carga mais informações . Vê-lo como qualquer coisa em init é considerado parte da declaração da página. asp.net mais tarde irá carregar o estado de visualização, e depois que ele começa a rastrear alterações no viewstate. É depois disso que asp.net vai ver qualquer diferença entre a informação inicial sobre viewstate e as informações alteradas, então movê-lo para carga evita o problema (como estado inicial não está lá, e novo estado é o que você colocar na viewstate) . A partir do link acima:

"A razão é porque a classe StateBag apenas as faixas alterações aos seus membros após a sua TrackViewState () método possui foi invocada. Ou seja, se você tem um StateBag, todos e quaisquer acréscimos ou modificações que são feitas antes TrackViewState () é feita não será salvo quando o SaveViewState () Método é invocado. O TrackViewState () método é chamado no final do fase de inicialização, que acontece depois da fase de instanciação. Portanto, a propriedade inicial atribuições no instanciação -fase enquanto escrito para o ViewState em conjunto das propriedades assessores são- não persistiu durante o SaveViewState () chamada de método na save estágio estado de exibição, porque o TrackViewState método () tem ainda de ser Chamado ".

Outras dicas

Aqui está uma excelente resposta outro usuário postou sobre ciclo de vida de página ASP.NET vale a pena um olhar para as questões de ViewState.

Além disso, ter um olhar para " verdadeiramente ViewState Entendimento "

Como afirmei na parte I adicionado mais tarde, aparentemente, não é possível definir qualquer coisa no estado de exibição antes de carregamento da página, embora Asp.net não lançar um erro e vai existir no estado de exibição em todo o inicial ciclo de vida da página, não vai persistir no ciclo de vida do post posterior de volta.

Dê uma olhada no que você está definindo você valores ViewState. Possivelmente wireup seu evento OnUnload e inspecionar o objeto ViewState apenas para certificar-se os valores estão realmente recebendo set.

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