Viewstate скрытое поле настолько велико, что все падает - PullRequest
6 голосов
/ 24 августа 2009

По какой-то причине состояние моего приложения стало гигантским (около 14 миллионов символов). Это добавляет около 1 минуты времени загрузки. Если страница наконец загружается (что происходит не часто), сервер падает каждый раз, когда кто-то отправляет форму, потому что "Post size exceeded allowed limits."

Это появилось внезапно. Я не добавил никаких полей, просто какой-то javascript на странице.

Люди сказали, чтобы я проверял, как выглядит состояние. Google сказал мне сделать это:

<pages maxPageStateFieldLength="1024">

... так что теперь вместо огромного скрытого поля у меня теперь есть что-то вроде 100 очень больших скрытых полей. Это не совсем то, что я искал.

Зачем .NET делать что-то подобное? Как я могу это исправить?

Ответы [ 2 ]

7 голосов
/ 24 августа 2009

Я бы предложил использовать утилиту для декодирования вашего состояния просмотра, чтобы вы могли получить представление о том, что на самом деле внутри него (поскольку у вас, очевидно, есть много информации, которая вам, кажется, не нужна).

A декодер состояния представления позволит вам увидеть то, что находится в вашем состоянии просмотра, чего вы не ожидаете. Затем вы можете либо изменить свой код, удалить нарушающий элемент управления, либо выборочно отключить viewstate (используя атрибут EnableViewState="false") для элементов управления, для которых он не должен быть включен.

3 голосов
/ 24 августа 2009

Имейте в виду, что элементы управления сохранят свои значения во всех обратных передачах без представления состояния. Вы часто можете отключить viewstate для многих элементов управления без каких-либо проблем. Чтобы отключить режим просмотра для определенного набора элементов управления:

EnableViewState="false"

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

...