Pergunta

Vindo de um fundo PHP eu amo usar URLs limpas para os dados da garra de um serviço para outro.

No entanto, em alguns dos meus projetos ASP.NET eu recebo o parâmetro ViewState horrível em meus URLs.

Existe uma maneira de desligar isso globalmente?

O que afetam isso terá sobre a minha ASP.NET aplicativo?

Foi útil?

Solução

Você pode desativar viewstate para todo o site como este:

    <system.web>
<pages enableViewState="false" />

Dito isso, você não deve estar recebendo-o na url. ViewState é um campo oculto que é enviado para o servidor com uma nova postagem (que normalmente usa post). Ele mantém o estado dos controles quando a página foi prestado ao cliente, enviando-o com cada nova postagem. Se ele funciona para o aplicativo que você poderia mudar para o uso pós vez (a forma problema é certamente usando get), se não dar uma olhada em resposta de Jon.

Verifique este link para mais informações sobre como os ajustes viewstate para o ciclo de vida do asp.net: http://msdn.microsoft.com/en-us/library/ms972976.aspx .

Outras dicas

Eu tinha uma pergunta semelhante quando a escrita de reputação .

Eu não sei como fazê-lo globalmente além de nunca usar um formulário com set runat="server", que é mais a ver com a disciplina de uma definição. Em particular, se você tiver set runat="server" em um formulário Eu acredito que você sempre vai ter um parâmetro viewstate, mesmo se você tiver desativado em todos os lugares para que você não obter qualquer valores . Essa foi a minha experiência, de qualquer maneira.

Obviamente, isso você limita um pouco, mas eu achei que usando os controles de servidor HTML (em vez dos controles do ASP.NET) para partes apropriadas ASP.NET pode tornar a vida muito mais simples de entender.

Desligue o ViewState por padrão, utilizando um elemento <page> no web.config. Usando EnableViewState="true" na directiva @Page deixarão de trabalho uma vez que você desabilitar o ViewState no web.config. Se você decidir mais tarde que necessita do ViewState para uma página específica, você pode ligá-lo novamente para apenas essa página usando um elemento <location>.

<configuration>
  <system.web>
    <pages enableViewState="false" />
  </system.web>

  <location path="MyFolder/MyPage.aspx">
    <system.web>
      <pages enableViewState="true" />
    </system.web>
  </location>
  <location path="Site.master">
    <system.web>
      <pages enableViewState="true" />
    </system.web>
  </location>
</configuration>

Você precisa fazer o mesmo para todas as páginas mestras que seu ViewState habilitado usos página.

Adicione esta para o arquivo web.config:

<Pages enableViewState="false"/> 

Você poderia mudar para ASP.Net MVC. Pelo que eu entendo que não usar o ViewState.

Do recall, no entanto, que certos comportamentos esperados pela maioria dos desenvolvedores de formulários ASP.NET Web não funcionará sem ViewState. O objetivo do ViewState é fornecer a ilusão de que várias propriedades de página e controle persistem de uma solicitação para o seguinte. O ViewState não contém todas as propriedades de controle, apenas os que mudaram. A ideia é que ViewState mantém essas propriedades como eram na época a forma última prestados.

Um exemplo bom é um evento SelectedIndexChanged em uma lista suspensa (aquele que não tem autopostback set). Isso funciona porque ViewState mantém o índice anterior, e os postes formam o índice atual, eo controle compara os dois, a fim de saber que o índice selecionado mudou. É quando ele gera o evento SelectedIndexChanged. Sem ViewState, esse evento não dispara. Mesmo para eventos TextChanged, etc.

Ausente a situação GET (que eu nunca ter executado em), o grande problema com ViewState é usá-lo onde não é necessário. Seu controle de grade não precisa manter os valores anteriores de todos os controles em todas as suas linhas, por isso não permitir ViewState sobre ele.

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