Причины, по которым валидация viewstate не выполняется (но только иногда) - PullRequest
1 голос
/ 05 февраля 2010

В нашем журнале появляется следующее сообщение:

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

Ну, это довольно ясно, и много было написано на эту тему. Однако я не могу воспроизвести это поведение, и я нахожу только пару тысяч ошибок в день в журналах; так что, вероятно, это не так очевидно.

Страница, о которой идет речь, имеет UpdatePanel и загружает один из трех пользовательских элементов управления в зависимости от строки запроса.

Есть ли какая-либо известная проблема с некоторыми клиентами или любое другое возможное объяснение?

Ответы [ 2 ]

0 голосов
/ 06 февраля 2010

Я видел такое поведение в тех случаях, когда на странице есть панели обновления, и значение где-то вне этого изменяется, но никогда не распространяется на клиента.

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

Если у вас есть такие данные, вы также можете поместить их в панель обновления.

Установите UpdateMode="Conditional" на нем, и в своем коде вы можете просто вызвать метод панелей обновления .update, когда вам нужно его обновить.

0 голосов
/ 05 февраля 2010

Один возможно Возможно, проблема в том, что

  • Вы загружаете элементы управления динамически
  • вы не даете им явный идентификатор
  • порядок воссоздания этих элементов управления другой (GET vs. POST)

Однажды у меня была такая проблема. Также Repeater - хорошие кандидаты для такого поведения, потому что каждый Элемент является INamingContainer. Если содержимое повторителя изменяется во время обратной передачи, вы можете получить эту ошибку.

...