ViewState недействителен только в Safari
Вопрос
Один из сайтов, которые я обслуживаю, в значительной степени зависит от использования ViewState
(это не мой код).Однако на некоторых страницах, где ViewState
слишком раздут, Safari бросает "Validation of viewstate MAC failed"
ошибка.
Похоже, это происходит только в Safari.Firefox, IE и Opera успешно загружаются по одному и тому же сценарию.
Решение 3
Я провел небольшое исследование по этому поводу, и хотя я не совсем уверен, что это причина, я считаю, что это связано с тем, что Safari не возвращает полный набор результатов (следовательно, обрезает его).
Я обсуждал с другим разработчиком и также нашел следующий пост на Channel 9, в котором рекомендуется использовать службу состояния SQL для хранения состояния просмотра, избегая проблем с обратной передачей, а также размера страницы.
Кажется, это лучшее решение?
Другие советы
Хотя я поддерживаю решение Channel 9, также имейте в виду, что в некоторых хостинговых средах Safari не считается браузером более высокого уровня.Возможно, вам придется добавить его в окно просмотра вашего приложения, чтобы использовать некоторые функции ASP.Net.
Это было основной причиной некоторых головных болей, с которыми мы столкнулись при работе с сайтом клиента, который использовал элемент управления ASP Menu.
Моей первой задачей было бы просмотреть элементы на странице и посмотреть, какие элементы управления:
- Будет работать, когда я выключу ViewState
- Может быть перемещен со страницы в вызов AJAX для загрузки при необходимости.
В противном случае, вот отказ от ответственности: я никогда не использовал это решение на веб-сайте, но в прошлом, когда я хотел устранить массивные состояния ViewState в приложениях с ограниченной аудиторией, я сохранял ViewState в сеансе.
У меня это сработало, поскольку воздействие на память не имеет существенного значения для количества пользователей, но если у вас довольно популярный сайт, я бы не рекомендовал этот подход.Однако, если решение Session работает для Safari, вы всегда можете обнаружить пользовательский агент и соответствующим образом сфальсифицировать его.