Pergunta

Um dos sites que mantenho depende muito do uso de ViewState (não é meu código).No entanto, em certas páginas onde o ViewState está extra-inchado, o Safari lança um "Validation of viewstate MAC failed" erro.

Isso parece acontecer apenas no Safari.Firefox, IE e Opera carregam com sucesso no mesmo cenário.

Foi útil?

Solução 3

Tenho feito uma pequena pesquisa sobre isso e, embora não tenha muita certeza de que seja a causa, acredito que seja porque o Safari não está retornando o conjunto completo de resultados (portanto, cortando-o).

Estive em discussão com outro desenvolvedor e também encontrei a seguinte postagem no Canal 9 que recomenda usar o serviço SQL State para armazenar o viewstate evitando o problema de postback e também o tamanho da página.

http://channel9.msdn.com/forums/TechOff/250549-ASPNET-ViewState-flawed-architecture/?CommentID=270477#263702

Esta parece ser a melhor solução?

Outras dicas

Embora eu apoie a solução do Channel 9, esteja ciente de que em alguns ambientes hospedados o Safari não é considerado um navegador de nível superior.Pode ser necessário adicioná-lo ao navegador do seu aplicativo para poder usar alguns recursos do ASP.Net.

Essa foi a causa raiz de algumas dores de cabeça que tivemos no site de um cliente que usava o controle Menu ASP.

Minha primeira parada seria examinar os elementos da página e ver quais controles:

  1. Ainda funcionará quando eu desligar o ViewState
  2. Pode ser movido para fora da página e para uma chamada AJAX para ser carregada quando necessário

Se isso falhar, aqui está o aviso: nunca usei essa solução em um site voltado para a Web - mas no passado, quando quis eliminar ViewStates massivos em aplicativos de público limitado, armazenei o ViewState na sessão.

Funcionou para mim porque o impacto na memória não é significativo para o número de usuários, mas se você estiver executando um site bastante popular, eu não recomendaria essa abordagem.No entanto, se a solução Session funcionar para o Safari, você sempre poderá detectar o agente do usuário e falsificá-lo adequadamente.

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