не удается отключить ViewState (asp.net/VS2010), что может быть не так? - PullRequest
1 голос
/ 24 февраля 2012

Я работаю над приложением, которое генерирует список клиентов из БД.Я отключил ViewState в default.aspx, но теперь при просмотре исходного кода сгенерированной HTML-страницы я увидел, что ViewState включен.

Я попытался добавить и ViewStateMode = "Disabled", и EnableViewState= "Ложь" (отдельно и даже вместе) без удачи.

Что может быть не так?

ViewState код из исходного кода, если это поможет:

<div class="aspNetHidden"> 
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" /> 
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" /> 
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="88luWaDvrTt0+OWLhB and a lots of characters after this...

РЕДАКТИРОВАТЬ: Теперь, когда я снова посмотрел в исходном коде, я вижу следующее, что я нахожу странным:

  • Есть много символов ViewState (для его просмотра требуется 15-20 секунд)
  • Есть два места с кодом ViewState, отдельные друг от друга

Ответы [ 3 ]

2 голосов
/ 24 февраля 2012

ASP.Net страницы имеют как Control State , так и View State.Состояние управления предназначено для абсолютно важных данных, без которых элемент управления не может функционировать (по крайней мере, теоретически).

Состояние просмотра и состояние управления хранятся в одном и том же поле.Сайт с полностью отключенным состоянием просмотра может по-прежнему иметь контрольное состояние.

К сожалению, ASP.Net весьма непоследователен в отношении того, как он различается между ними.Например, DropDownList больше не будет запускать события изменения с отключенным режимом просмотра состояния.Я считаю, что это важная функция раскрывающегося списка, и я был бы рад потратить несколько байтов пространства для хранения текущего выбранного значения в состоянии управления, чтобы можно было обнаружить изменение.

Если вам интересносодержимое скрытого поля, содержащего состояние, можно расшифровать, .Это может быть очень полезно для обнаружения "утечек" состояния просмотра.

2 голосов
/ 24 февраля 2012

Глядя на документацию MSDN , даже когда вы ее отключаете, она все еще используется для обнаружения обратных передач:

Даже если EnableViewState равно false , страница может содержать скрытое поле состояния просмотра, которое используется ASP.NET для обнаружения обратной передачи.

1 голос
/ 24 февраля 2012

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

LosFormatter lf = new LosFormatter();
object deserialized = lf.Deserialize("!!! YOUR VIEWSTATE HERE !!!");

Присоедините отладчик и посмотрите на содержимое deserialized

...