Как реализовать шаблон Post/Redirect/Get в веб-формах asp.net?

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

  •  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-адрес будет выглядеть так:

http://localhost:1157/WebSite1/Default.aspx?__VIEWSTATE=%2FwEPDwUKMTkwNjc4NTIwMWRkoJEtEHZ8lHQ53QllSkz8ncpEw80%3D&__EVENTVALIDATION=%2FwEWAwKf%2BPPUCwKTjKGwCgKs34rGBvus9oxN%2F QkHlkzpKUEwrbxHLM6u&text1=ashish&button1=

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