Как мне сохранить значение метки с помощью response.redirect?

StackOverflow https://stackoverflow.com/questions/103765

  •  01-07-2019
  •  | 
  •  

Вопрос

Вот такая ситуация:У меня есть набор текста метки, за которым сразу следует вызов response.redirect() следующим образом (это всего лишь пример, но я считаю, что он точно описывает мою ситуацию):

aspx:

<asp:Label runat="server" Text="default text" />

Скрытый код (код, вызываемый при событии onclick):

Label.Text = "foo";
Response.Redirect("Default.aspx");   

Когда страница отображается, на надписи написано "текст по умолчанию".Что мне нужно сделать по-другому?Насколько я понимал, такие изменения будут вноситься автоматически за кулисами, но, по-видимому, не в данном случае.Спасибо.

Для небольшой дополнительной информации фрагмент кода вызывается внутри метода, который вызывается при событии onclick.Это еще не все, но я включил только то, что представляет интерес для данного вопроса.

Это было полезно?

Решение

После перенаправления вы потеряете всю информацию о состоянии, связанную с вашими элементами управления.Если вы просто хотите, чтобы страница обновилась, удалите перенаправление.После завершения выполнения кода страница обновится, и любое состояние будет сохранено.

За кулисами это работает, потому что ASP.NET записывает информацию о состоянии в скрытое поле ввода на странице.Когда вы нажимаете кнопку, форма публикуется и ASP.NET расшифровывает состояние просмотра.Ваш код запускается, изменяя состояние, и после этого состояние снова записывается в скрытое поле, и цикл продолжается, пока вы не измените страницу без ПУБЛИКАЦИИ.Это может произойти при нажатии на гиперссылку на другую страницу или через Response.Redirect(), который предписывает браузеру перейти по указанному URL.

Другие советы

A Response.Redirect call попросит браузер пользователя загрузить страницу, указанную в URL-адресе, который вы ему даете.Поскольку это новый запрос для вашей страницы, страница использует текст, который содержится в вашей разметке (поскольку я предполагаю, что текст метки задается внутри обработчика кнопок или аналогичного).

Если вы удалите Response.Redirect позвоните, ваша страница должна работать так, как рекламируется.

ASP и ASP.Net по своей сути не имеют состояния, если явно не указано состояние.Обычно между обратными отправками информация, такая как значение метки, содержится в viewstate, но если вы меняете страницы, это viewstate теряется, потому что оно сохранялось в скрытом поле на странице.

Если вы хотите сохранять значение метки между вызовами, вам необходимо использовать один из механизмов состояния (напримерСеанс, Предпочтения) или системы связи (Запрос (GET, POST)).

Кроме того, вы можете искать сервер.Передача, которая изменит того, кто обрабатывает страницу за кулисами.Ответ.В большинстве случаев перенаправление предназначено для удаления из вашего текущего контекста.

Чтобы сохранить состояние, используйте сервер.Передача вместо ответа.Перенаправление.

Итак, если я могу ответить на свой собственный вопрос (согласно FAQ, это приветствуется), короткий ответ таков: вы не сохраняете состояние просмотра с помощью перенаправлений.Состояние просмотра предназначено для обратной передачи, а не для перенаправления.

Бонус: Все, что вы когда-либо хотели знать о состоянии просмотра в ASP.NET, с картинками!

Как бы то ни было (и, надеюсь, это чего-то стоит), глава 6 из Pro ASP.NET 3.5 на C # 2008, Второе издание это потрясающий ресурс по этому вопросу.До сих пор книга в целом была великолепна.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top