2008-08-04 12 views
11

Один из сайтов, которые я поддерживаю, в значительной степени зависит от использования ViewState (это не мой код). Однако на некоторых страницах, где ViewState является излишне раздутым, Safari выбрасывает ошибку "Validation of viewstate MAC failed".ViewState недействителен только в Safari

Возможно, это происходит только в Сафари. Firefox, IE и Opera успешно загружаются в том же сценарии.

ответ

1

Я делал небольшое исследование этого, и пока я не совсем уверен в своей причине, я считаю, что это потому, что Safari не возвращает полный набор результатов (следовательно, обрезает его).

Я был в обсуждении с другим разработчиком и нашел следующее сообщение на канале 9, которое рекомендует использовать службу SQL State для хранения состояния просмотра, избегая проблемы с обратной передачей, а также размера страницы.

http://channel9.msdn.com/forums/TechOff/250549-ASPNET-ViewState-flawed-architecture/?CommentID=270477#263702

кажется ли это как лучшее решение?

3

Мой первый порт захода будет проходить через элементы на странице и посмотреть, который контролирует:

  1. будет еще работать, когда я переключаюсь ViewState от
  2. Может быть перемещены из страницы и в вызов AJAX для загрузки при необходимости

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

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

4

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

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