Viewstate не работает только в IE - PullRequest
3 голосов
/ 11 февраля 2009

У меня есть страница, которая содержит несколько полей поиска для запроса к базе данных и отображения результатов. Состояние просмотра требуется для сохранения списков элементов в выпадающих списках.

Все отлично работает в Firefox (3) и Chrome, но не работает в Internet Explorer, но только иногда (определенные действия, такие как сброс формы, которая на самом деле просто выполняет response.redirect с некоторыми параметрами строки запроса) ... что случается в Viewstate сбрасывается на URL, и выдается страница с ошибкой.

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

Спасибо, куча,

Greg

UPDATE:

При дальнейшем расследовании я установил, что фактическая ошибка такова:

"Проверка MAC представления состояния не выполнена. Если это приложение размещено на веб-ферме или в кластере, убедитесь, что в конфигурации указан тот же ключ validationKey и алгоритм проверки. AutoGenerate нельзя использовать в кластере."

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

веселит Greg

ОБНОВЛЕНИЕ 2:

Кто-нибудь может подсказать, почему это происходит только в IE (а не в FF или Chrome) ?? Скорее всего, это проблема смены элементов управления, ключей машин или других предложений, которые я читал, если другие браузеры справятся с этим.

Любые идеи о том, что IE делает по-другому, что может вызвать этот сбой ??

РЕШЕНИЕ:

Оказывается, это была действительно глупая проблема - я использовал неправильный мастер-шаблон в CMS и поэтому имел 2 тега формы. Удалите лишний тег формы, проблема решена!

Спасибо огромное Бендеви за помощь в решении этой проблемы (см. Комментарии в сообщении Бендеви).

Это 4 часа моей жизни, я бы хотел вернуться ... но рад, что могу двигаться дальше. Еще раз спасибо сообществу Stack Overflow:)

Ответы [ 3 ]

1 голос
/ 11 февраля 2009

Мы исправили эту проблему с помощью предложения этого блога . Пожалуйста, посмотрите на это ...

1 голос
/ 11 февраля 2009

Кажется немного странным, что ваше представление отправляет на URL. Это произошло бы, если бы у вас был какой-то пользовательский тег формы, который использовал метод GET вместо стандартного тега формы уровня страницы asp.net.

Если вам нужен тег формы с методом GET, я бы установил EnableViewState = "false" в объявлении страницы и настроил своего рода кэширование списка. Вот пример, но вы можете найти гораздо лучшие образцы онлайн (особенно те, которые дважды проверяют блокировку). Таким образом, вы можете вызывать это каждый постбэк и не беспокоиться о сохранении чего-либо в состоянии просмотра.

List<string> getCachedFields()
{
    var searchFields = Cache["searchFields"] as List<string>;
    if (searchFields == null)
    {
        searchFields = GetFieldsFromDbOrSomewhereExpensive();
        Cache["searchFields"] = searchFields;
    }
    return searchFields;
}
0 голосов
/ 06 октября 2015

Мне пришлось удалить EnableViewStateMac="false" из элемента <pages>, чтобы избежать ошибки в IE.

...