Как реализовать шаблон Post/Redirect/Get в asp.net WebForms?
Итак, я понимаю основы шаблона prg. Но я не сталкивался с техникой, позволяющей сделать произвольные данные доступными для экземпляра страницы get.
Например, я мог бы хотеть отображать различные сообщения обратной связи для пользователя в зависимости от их действия, которое инициировало PostBack.
То, что я делал, это отправка идентификатора в качестве параметра строки запроса. Это работает хорошо, но оно создает проблемы с закладками и не похоже, что оно будет очень хорошо масштабироваться. Что если мне нужно отправить все ViewState?
К сожалению, на данный момент я привязан к WebForms и не смог убедить мою организацию перейти на mvc.
2 ответа
Если поля POSTed сохраняются до перенаправления, и вам необходимо получить доступ к этим данным после перенаправления, я добавлю идентификатор для записи данных в строку запроса, как вы упомянули. Вы также можете указать статус запроса (для отображения сообщений и т. Д.). Затем на странице GET вы можете считывать данные и делать с ними что угодно.
Я не вижу другого способа обойти это, поскольку каждая страница, полученная GET, не будет иметь доступа к предыдущей странице. ViewState
и т.п.
С помощью Server.Transfer
будет иметь тот же эффект, что и обработка POST на исходной странице.
Вы можете использовать переменные Session для хранения данных POST, но это воняет.
Я думаю, что вы все еще можете использовать метод get в элементе формы. В этом случае вы не сможете использовать идентификатор вашего элемента управления обычным способом. Но вы можете использовать коллекцию Request.Params, чтобы получить представление состояния.
Обновление: Извините, я только что попробовал еще раз. и обнаружил, что вы можете получить доступ к управлению вашим сервером по его идентификатору в codebehind. лайк:
Response.Write(text1.Text)
посмотрите пример:
Страница aspx (только элемент формы):
< form id="form1" runat="server" method="get">
< div>
< asp:TextBox ID="text1" runat="server" />
< asp:Button ID="button1" runat="server" OnClick="buttonClick" />
< div>
< form>
ПРИМЕЧАНИЕ. Я использовал пробел перед каждым знаком "<", иначе приведенный выше код не будет виден.
код за страницей (только событие нажатия кнопки):
protected void buttonClick(object sender, EventArgs e)
{
string text = Request.Params["text1"];
Response.Write(text);
}
при нажатии на кнопку URL будет выглядеть так: