Gridview ControlState очень большой, даже если viewstate отключен и не использует DataKeyNames - PullRequest
3 голосов
/ 20 декабря 2009

У меня есть asp: Gridview, связанный с asp: ObjectDataSource. Я отключил ViewState в GridView и не установил свойство DataKeyNames. У меня есть около 10 BoundFields и несколько TemplateFields. Эти TemplateFields связаны не с серверными элементами управления, а с тегом привязки или тегом img.

Однако во время выполнения, когда я включаю трассировку страницы, я вижу, что ControlState Gridview изменяется между 7 и 12 КБ для отображения только 14 строк данных. (Просмотр источника на отображаемой странице также дает такую ​​же длинную строку в скрытом поле __VIEWSTATE). Я не понимаю, почему это происходит, так как у меня есть enableViewState = "false" в виде сетки, и, как сказано выше, я не использую DataKeyNames. Итак, откуда взялся этот Gridview ControlState и есть ли способ от него избавиться?

Спасибо заранее, Тим

Ответы [ 3 ]

4 голосов
/ 20 декабря 2009

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

note: По умолчанию каркас страницы ASP.NET сохраняет состояние элемента управления на странице в том же скрытом элементе, в котором хранится состояние просмотра. Даже если состояние просмотра отключено Microsoft сказала

это означает, что вы действительно видели данные ControlState в поле _ViewState, что нормально потому что, как сказал Microsoft, ControlState элемента управления сохраняется в viewstate, даже если вы отключите ViewState

0 голосов
/ 14 июля 2010

В этой статье говорится, что состояние управления фактически сохраняется в __VIEWSTATE в HybridDictionary.

Кроме того, в этих статьях говорится, что даже если вы можете установить EnableViewState=false, вы никогда не сможете отключить ControlState (в этом суть - клиенты не могут сломать ваше приложение):

0 голосов
/ 20 декабря 2009

Если вы отключаете представление состояния, не используете элементы управления обратной передачей в виде сетки и не выполняете разбиение на страницы / сортировку, тогда вам, вероятно, лучше использовать ретранслятор. Повторители не должны быть размещены внутри тега. Таким образом, состояние контроля не будет проблемой.

Если вы используете .net 3.5, вы также можете исследовать с помощью ListView, который мне кажется гибридом повторителя / сетки.

...