Как реализовать шаблон Post/Redirect/Get в веб-формах asp.net?
-
06-09-2019 - |
Вопрос
Итак, я понимаю основы шаблона prg.Но я не встречал способа сделать произвольные данные доступными для «полученного» экземпляра страницы.
Например, я мог бы захотеть отображать пользователю разные сообщения обратной связи в зависимости от его действия, которое инициировало PostBack.
Я отправлял идентификатор в качестве параметра строки запроса.Это работает нормально, но вызывает проблемы с закладками и, похоже, не очень хорошо масштабируется.Что, если мне нужно отправить все ViewState?
К сожалению, на данный момент я привязан к WebForms и не смог убедить свою организацию перейти на MVC.
Решение
Если поля, отправленные POST, сохраняются до перенаправления, и вам необходимо получить доступ к этим данным после перенаправления, я бы добавил идентификатор записи (записей) данных в строку запроса, как вы упомянули.Вы также можете указать статус запроса (для отображения сообщений и т. д.).Затем на странице GET вы можете считывать данные и делать с ними все, что угодно.
Я не вижу другого способа обойти это, поскольку каждая страница, полученная с помощью GET, не будет иметь доступа к предыдущей странице. ViewState
и т. д.
С использованием Server.Transfer
будет иметь тот же эффект, что и обработка POST на исходной странице.
Вы можете использовать переменные сеанса для хранения данных POST, но это нехорошо.
Другие советы
Я думаю, вы все равно можете использовать метод get в элементе формы.В этом случае вы не сможете использовать идентификатор вашего элемента управления обычным способом.Но вы можете использовать коллекцию Request.Params для получения состояния представления.
Обновлять:Извините, я только что попробовал еще раз.и обнаружил, что вы можете получить доступ к элементу управления сервером по его идентификатору в выделенном коде.нравиться:
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-адрес будет выглядеть так: