ViewState недействителен только в Safari

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

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

Ответ 1

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

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

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

Это похоже на лучшее решение?

Ответ 2

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

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

Ответ 3

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

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

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

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