Как мне сохранить значение метки через response.redirect? - PullRequest
0 голосов
/ 19 сентября 2008

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

ASPX:

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

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

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

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

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

Ответы [ 6 ]

3 голосов
/ 19 сентября 2008

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

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

1 голос
/ 19 сентября 2008

Чтобы сохранить состояние, используйте Server.Transfer вместо Response.Redirect.

1 голос
/ 19 сентября 2008

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

За кадром это работает, потому что ASP.NET записывает информацию о состоянии в скрытое поле ввода на странице. Когда вы нажимаете кнопку, форма публикуется, и ASP.NET расшифровывает состояние просмотра. Ваш код выполняется, изменяя состояние, и после этого состояние снова записывается в скрытое поле, и цикл продолжается , пока вы не измените страницу без POST . Это может произойти при нажатии гиперссылки на другую страницу или с помощью Response.Redirect (), которая указывает браузеру следовать указанному URL-адресу.

1 голос
/ 19 сентября 2008

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

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

Кроме того, вы можете искать Server.Transfer, который изменит того, кто обрабатывает страницу за кулисами. Response.Redirect предназначен для подавления вашего текущего контекста в большинстве случаев.

0 голосов
/ 27 сентября 2008

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

0 голосов
/ 19 сентября 2008

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

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

...