2009-02-11 2 views
3

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

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

Неужели кто-то сталкивался с этим раньше? Возможно, некоторые указатели на то, что может вызвать это в IE?

Благодарности куч,

Greg

UPDATE:

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

«Валидация ViewState MAC не удалось Если. это приложение размещено веб-фермой или кластером, убедитесь, что в конфигурации указан один и тот же алгоритм validationKey и валидации. AutoGenerate не может использоваться в кластере ».

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

веселит Greg

UPDATE 2:

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

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

РЕШЕНИЕ:

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

Спасибо, что кучи для bendewey помогли мне решить эту проблему (см. Комментарии в сообщении bendewey).

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

+0

Это помогло бы, если бы вы могли объяснить немного больше о перенаправлении и объяснить, что вы имеете в виду «сброс состояния просмотра по URL-адресу». – jeremcc

+0

перенаправление выглядит следующим образом: Response.Redirect (String.Concat (strPageUrl, "? Reset = true")); , что он сделал что-то вроде этого: HTTP: //domain/page.aspx _VIEWSTATE = afdfkhadkjhqkjdasf Во всяком случае ее решить - была вызвана несколькими тегами формы (как упоминалось выше) – Jeeby

ответ

1

Кажется немного странным, что ваше viewstate отправляет на адрес. Это произойдет, если у вас есть собственный тег формы, который использует метод 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

Ммм ... Я не сумасшедший по поводу идеи попадания в базу данных или другого дорогого хранилища данных при каждой загрузке страницы - далеко не идеальный. Дополнительная информация в следующем посте ... – Jeeby

+0

Вы не будете бить базу данных каждый раз. Это то, что нужно для кеширования. – bendewey

+1

Также вы можете проверить свой источник и убедиться, что у вас нет двух меток формы. Я никогда не видел этого, но маловероятно, чтобы разные браузеры могли действовать по-разному с несколькими тегами формы. – bendewey

1

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

+0

Спасибо за ссылку, однако я не верю, что это проблема, поскольку я работаю локально, и ее определенная загрузка полной страницы - это не имеет никакого отношения к скорости нажатия. – Jeeby

0

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

Смежные вопросы