ASP.net ViewState - mesmo quando desativado, alguns existem viewstate. Por quê?

StackOverflow https://stackoverflow.com/questions/413558

  •  03-07-2019
  •  | 
  •  

Pergunta

Mesmo quando na página, a propriedade EnableViewState está desativado, ainda estou vendo algum viewstate existente na página:

"<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="VkBAB3n5LZYtY+nTzk1vEu1P/6QLf4qzFIKzpFRJe3DMf8UseUA/1RsO409HJX4QhkROSP0umoJvatjK/q+jXA==" />"

A minha pergunta é por quê?

Foi útil?

Solução

Esta poderia ser controles que estão usando ControlState. Qualquer controle que tem estado de controle irá ignorar suas configurações ViewState.

Outras dicas

É o estado do controle.

Se você realmente quer se livrar de viewstate e ControlState você pode usar este código no code-behind para a página, ou em qualquer classe que o código-behind deriva da

class MyPage : Page {
    private class DummyPageStatePersister : PageStatePersister {
        public DummyPageStatePersister(Page p) : base(p) {}
        public override void Load() {}
        public override void Save() {}
    }
    private DummyPageStatePersister _PageStatePersister;
    protected override PageStatePersister PageStatePersister {
        get {
            if (_PageStatePersister == null)
                _PageStatePersister = new DummyPageStatePersister(this);
            return _PageStatePersister;
        }
    }

    // other stuff comes here
}

Tenha muito cuidado ao fazer isso, porém, desde que você está violando o contrato com os controles. MSDN afirma explicitamente que o estado de controle está sempre disponível. Na prática, porém, ele tem trabalhado para mim.

Editar: Desde que eu estava downvoted, eu gostaria de salientar mais uma vez: não faça isso se você não sabe exatamente o que você está fazendo. No meu caso, quase todo o aplicativo foi escrito em JavaScript do lado do cliente, e sobre aqueles poucos occations onde postbacks ocorreram, eu sempre usei a coleção Request.Form para recuperar os valores. Não use controles do lado do servidor para nada, mas a renderização simples, se você fizer isso.

Este artigo é um pouco velho, mas a minha compreensão a maioria dos pontos ainda são válidos:

  1. Você deve ter uma forma de tag do lado do servidor () em sua página ASPX se você quiser usar ViewState. Um campo de formulário é necessário para o campo oculto que contém as informações ViewState pode enviar de volta para o servidor. E, deve ser uma forma do lado do servidor para que a estrutura página ASP.NET pode adicionar o campo oculto quando a página é executado no servidor.
  2. A página em si salva 20 ou mais bytes de informação em ViewState, que ele usa para distribuir dados de postagem e valores ViewState aos controles corretos sobre postback. Assim, mesmo se ViewState está desabilitada para a página ou aplicativo, você pode ver alguns bytes restantes no ViewState.
  3. Nos casos em que a página faz parte de trás não post, você pode eliminar ViewState de uma página omitindo a tag do lado do servidor.

http://msdn.microsoft.com/en-us/library /ms972427.aspx

Este é um artigo absolutamente fantástico em ViewState se você desenvolve em ASP.NET lê-lo!

ASP.NET ViewState Helper também é uma boa ferramenta para ver o que está acontecendo em sua ViewState

ControlState podem ser as causas. estado de controle não pode ser desativado. Em ASP.NET 2.0, há uma distinção entre os dados necessários para fazer um trabalho de controle (ControlState) e outros dados (viewstate)

E sim alguns dos controles não funcionam sem ControlState. Se você quiser saber qual deles está causando isso ou o que o viewstate contém confira um viewstate espectador

Os controles que implementa IPostBackEventHandler como caixa de texto, Caixa de Verificação, etc . irá manter o estado, mesmo depois de desativar o viewstate. A razão é durante a carga fase Postback de dados, esses controles receberá informações sobre o estado de formulário de volta Publicado.

Mas controles como rótulo que não implementar IPostBackEventHandler não vai obter qualquer informação de estado de dados retrospectivos publicado e, portanto, dependem inteiramente viewstate para manter o estado.

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