Веб-формы с ASP.NET AJAX: HyperLink против LinkButton и Response.Redirect из GridView - PullRequest
2 голосов
/ 02 февраля 2012

У меня есть 2 веб-формы asp.net.Первый имеет ScriptManager, History, UpdatePanel и GridView;позже ScriptManager, UpdatePanel и TextBoxes.Предпосылка здесь - список, который ссылается на детальную форму, где элемент может быть отредактирован.

Изнутри GridView (внутри UpdatePanel), если я использую элемент управления HyperLink с URL-адресом, заданным для страницы редактирования (с необходимыми параметрами), что-то изменить, сохранить его, а затем нажмите кнопку назад, я вижу оригинальный список без обновлений.Нажатие F5 для обновления отображает изменения.

Если вместо этого я использую LinkButton внутри GridView, и обрабатываю этот LinkButton в коде позади, чтобы выполнить Response.Redirect для той же страницы редактирования (с теми же параметрами),внесите те же изменения, сохраните и нажмите кнопку «Назад», список на исходной странице автоматически обновится, чтобы показать мои изменения.

Обратите внимание, что код на странице сведений, где выполняется редактирование / сохранение, не изменяется- изменяется только то, как он отображается в первый раз.

Мой вопрос таков: что это за Response.Redirect, который вызывает обновление страницы при нажатии кнопки «Назад», и ее можно копировать?это для прямого подхода HyperLink?Я бы предпочел использовать метод HyperLink, так как не вижу причин для обратной передачи, но я хочу, чтобы GridView обновлялся, когда пользователь просматривает его.

Спасибо.

1 Ответ

2 голосов
/ 02 февраля 2012

LinkButton вызывает обратную передачу, ответом на которую является команда HTTP 302 redirect, запускаемая на стороне сервера вашим Response.Redirect. Поэтому ваш веб-браузер не кэширует старую версию страницы.

Элемент управления Hyperlink просто отображает обычный тег <a>, который ведет на страницу сведений на стороне клиента. У браузера нет причин полагать, что страница могла измениться, поэтому он отображает кэшированную версию, когда вы нажимаете кнопку «Назад».

Если вы хотите указать браузеру, чтобы он не кэшировал страницу, если используется кнопка «Назад», используйте HTTP-заголовок кеш-контроля. W3C Link ,

В любом случае вы должны предоставить ссылку на странице сведений (или автоматическое перенаправление при принятии изменений), которая возвращает пользователя на страницу GridView / сводки, чтобы им не приходилось прибегать к использованию кнопки «Назад».

Изменить:

Извините, ранее предоставленный пример заголовка был не для Asp.net, но в основном вы захотите сделать что-то вроде этого:

Response.AppendHeader("Cache-Control", "no-cache")
...