Коллега разрабатывает приложение ASP.NET Web Forms и хочет отправить информацию, введенную в форме, с одной страницы на другую.
Он спросил меня, как это должно быть сделано, несмотря на отсутствиеИмея большой опыт работы с веб-формами ASP.NET, я ответил, что это можно сделать как простой пост в форме HTML.Однако нам трудно реализовать это на практике.
На обеих страницах используется одна и та же главная страница, а на главной странице определен один элемент <form>
.На первой странице (или я должен сказать, веб-форма ) есть <asp:TextBox runat="server" ...>
элементов и один <asp:LinkButton runat="server" ...>
.Кнопка имеет OnClick="lkbSend_Click"
.
В коде (при методе lkbSend_Click
) мой коллега должен выполнить некоторую предварительную проверку перед отправкой информации на вторую страницу, следовательно, используя атрибут PostBackUrl
для LinkButton (первое предложение, которое я нашел [1] , [2] ) не допускается, по крайней мере, не из разметки aspx
.
После болееВ исследовании мы нашли предложения [3] о выполнении запроса POST с последующим перенаправлением из codebehind, но это не работает, как мы и ожидали, потому что это две отдельные операции - POST работает нормально, нокогда пользователь перенаправляется, у нас больше нет Request.Form["..."]
.
Третья идея, с которой я столкнулся [4] - добавление информации к Context.Items
и затем использование Server.Transfer
;однако мы не можем этого сделать, потому что URL должен меняться между страницами.
В настоящее время мой коллега хранит содержимое формы в Context.Session
, но ни один из нас не доволен таким подходом, каким мы его находимне так хорошо масштабируется.
Я думал об изменении свойства PostBackUrl
кнопки ссылки из codebehind (в конце метода lkbSend_Click
), а затем вызывал новую форму POST.Возможно ли это, и если да, то как?
Я пытался:
btnSendEmail.PostBackUrl = "<another page's URL>";
btnSendEmail_OnClick(sender, e);
Но, не сильно удивляясь, это генерирует StackOverflowException
.
ВЕсли это невозможно, есть ли другой способ?
Дополнительные примечания:
Я понимаю, что нет PostUrl
свойство формы, или есть?
Я только что прочитал [5] , что "Вы определенно не можете POST и перенаправить одновременно«.Это было бы правильно?Если да, то как работает HTML <form action="...">
(и, вероятно, ASP PostBackUrl
)?
Данные должны быть POSTed (т.е. не кодироваться в строке URI, как вЗапрос GET).
Я видел предположение, что перенаправление HTTP 307 поможет, [6] , но это ненадежно.
Спасибо,
[1] Как передавать информацию между веб-формами в asp.net
[2] asp.net 4.5 Предыдущая страница имеет значение null с размещением на нескольких страницах с использованием главной страницы
[3] Перенаправление на другую страницу с использованием метода Post из кода позади
[4] Действие PostBackUrl Программно с использованием C #
[5] Можно ли установить переменную POST перед перенаправлением на новыйстраница?
[6] Хороший способ перенаправления с помощью запроса POST?