ASP.Net 2.0: кнопка «Назад» в браузере - неверный аргумент обратной или обратной связи - PullRequest
2 голосов
/ 10 июля 2009

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

Когда пользователь делает следующее, я получаю эту ошибку:

Invalid postback or callback argument.  Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page.  For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them.  If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.
  • Кликает на пейджер, чтобы перейти на конкретная страница (скажем, 5)
  • Нажатие на ссылку для перехода на другую страницу
  • Нажмите кнопку «Назад» в своем браузере, чтобы вернуться на страницу с GridView
  • Сетка теперь возвращается к исходное состояние (на странице 1), так как браузер не отслеживал это, и поэтому пользователь нажимает, чтобы снова перейти на страницу 5, что приводит к ошибке

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

Вот код для пейджера:

protected void gvResults_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    gvResults.DataSource = SearchResults;
    gvResults.PageIndex = e.NewPageIndex;
    gvResults.DataBind();
}

, где gvResults - это GridView, а 'SearchResults' - это список, хранящийся в состоянии просмотра.

редактировать

Похоже, что хотя отображение сетки не отображает страницу 5, когда пользователь возвращается на страницу (возвращается к странице 1), по какой-то причине браузер действительно сохранил состояние просмотра и имеет отображение сетки на странице 5. Так что, если Я щелкаю на странице 4 и просматриваю код для события подкачки. Я вижу, что он считает, что страница, на которой он находился, была 5 ... хотя отображаемый контент был для страницы 1.

Мораль истории, по-видимому, заключается в том, что состояние просмотра сохраняется, когда пользователь нажимает кнопку «Назад», чтобы вернуться на страницу, но отображаемая таблица не отображается.

Ответы [ 3 ]

1 голос
/ 17 сентября 2010

Эта ошибка связана с кэшированным содержимым в браузере. Поэтому решение состоит в том, чтобы запретить кэширование этой страницы в браузере:

        Response.Cache.SetCacheability(HttpCacheability.NoCache)
        Response.Cache.SetExpires(DateTime.Now)
0 голосов
/ 10 июля 2009

После поиска я не смог найти разумного ответа; однако я обнаружил, что вы можете использовать элементы управления 3.5 для предварительного просмотра с asp.net 2.0, поэтому я добавил элемент управления «История» на страницу и позволил этому справляться с проблемами с кнопкой «Назад».

Похоже, это решило проблему

Спасибо!

0 голосов
/ 10 июля 2009

То, что происходит, это именно то, что говорит ошибка - элемент управления, который пользователь пытается использовать после нажатия кнопки «Назад», не является оригинальным, поскольку он загружен из кэша. Это может быть идентифицировано по изменчивым данным, которые у вас есть, или по временной метке - которую я не знаю.

Что вы могли бы сделать, это поставить

<%@ Page EnableEventValidation="false" %>

на этой странице, и дайте нам знать, если это сработало и не сломало ли что-нибудь еще на вашей странице ...

...