Как реализовать шаблон 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 будет выглядеть так:

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

Другие вопросы по тегам