Вопрос

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

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

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

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

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

Отключите 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.

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

<Pages enableViewState="false"/> 

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top