Как отключить viewstate для хорошего?

Исходя из фона PHP, мне нравится использовать чистые URL-адреса для захвата данных с одной службы на другую.

Однако на некоторых моих проектах ASP.NET я получаю ужасный параметр ViewState в своих URL-адресах.

Есть ли способ отключить это глобально?

Что повлияет это на мое приложение ASP.NET?

Ответы

Ответ 1

Вы можете отключить viewstate для всего сайта следующим образом:

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

Тем не менее, вы не должны получать его по URL-адресу. ViewState - это скрытое поле, которое отправляется на сервер с обратной передачей (обычно используется почта). Он сохраняет состояние элементов управления, когда страница была передана клиенту, отправив его с каждой обратной передачей. Если он работает для приложения, вы можете переключиться на использование сообщения вместо этого (форма проблемы, безусловно, использует get), если не взглянуть на ответ Джона.

Посмотрите эту ссылку для получения дополнительной информации о том, как viewstate вписывается в жизненный цикл asp.net: http://msdn.microsoft.com/en-us/library/ms972976.aspx.

Ответ 2

У меня был похожий вопрос при написании Tracker репутации.

Я не знаю, как вы делаете это глобально, кроме как просто никогда не использовать форму с runat="server" set, что больше связано с дисциплиной, чем с настройкой. В частности, если у вас есть runat="server", установленный в форме, я считаю, что вы всегда получите параметр viewstate, даже если вы отключили его везде, чтобы не получить никаких значений. Во всяком случае, это был мой опыт.

Очевидно, это немного ограничивает вас, но я обнаружил, что использование элементов управления HTML-сервера (вместо элементов управления ASP.NET) для соответствующих частей ASP.NET может сделать жизнь намного проще для понимания.

Ответ 3

Отключить ViewState по умолчанию с помощью элемента <page> в файле web.config. Использование EnableViewState="true" в директиве @Page больше не будет работать после отключения ViewState в web.config. Если позже вы решите, что вам нужна ViewState для конкретной страницы, вы можете включить ее для этой страницы только с помощью элемента <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>

Вам нужно сделать то же самое для любых мастер-страниц, которые использует страница с поддержкой ViewState.

Ответ 4

Добавьте это в файл web.config:

<Pages enableViewState="false"/> 

Ответ 5

Вы можете переключиться на ASP.Net MVC. Насколько я понимаю, он не использует ViewState.

Ответ 6

Помните, однако, что некоторые виды поведения, ожидаемые большинством разработчиков веб-форм ASP.NET, не будут работать без ViewState. Цель ViewState - представить иллюзию, что различные свойства страницы и управления сохраняются с одного запроса на другой. ViewState не содержит всех свойств управления, только те, которые изменились. Идея заключается в том, что ViewState сохраняет эти свойства так, как они были на момент отображения последней формы.

Одним из хороших примеров является событие SelectedIndexChanged в раскрывающемся списке (тот, у которого нет набора автозапуска). Это работает, потому что ViewState сохраняет предыдущий индекс, а форма отправляет текущий индекс, а элемент управления сравнивает эти два, чтобы знать, что выбранный индекс изменился. Это когда он вызывает событие SelectedIndexChanged. Без ViewState это событие не будет срабатывать. То же самое для событий TextChanged и т.д.

Отсутствие ситуации GET (с которой я никогда не сталкивался), большая проблема с ViewState использует ее там, где она не нужна. Для управления сеткой не нужно сохранять предыдущие значения всех элементов управления во всех своих строках, поэтому не включайте ViewState на нем.