Как мне реализовать шаблон Post / Redirect / Get в asp.net WebForms? - PullRequest
4 голосов
/ 28 мая 2009

Итак, я понимаю основы шаблона prg. Но я не сталкивался с техникой, позволяющей сделать произвольные данные доступными для экземпляра страницы get.

Например, я мог бы захотеть отображать различные сообщения обратной связи для пользователя в зависимости от их действия, которое инициировало PostBack.

Что я делал, так это отправлял идентификатор в качестве параметра строки запроса. Это хорошо работает, но создает проблемы с закладками и не очень хорошо масштабируется. Что если мне нужно отправить все данные ViewState?

К сожалению, на данный момент я привязан к WebForms и не смог убедить мою организацию перейти на mvc.

Ответы [ 2 ]

3 голосов
/ 28 мая 2009

Если поля POSTed сохраняются до перенаправления, и вам необходимо получить доступ к этим данным после перенаправления, я добавлю идентификатор для записи данных в строку запроса, как вы упомянули. Вы также можете указать статус запроса (для отображения сообщений и т. Д.). Затем на странице GET вы можете считывать данные и делать с ними что угодно.

Я не вижу другого способа обойти это, поскольку каждая страница, полученная GET, не будет иметь доступа к ViewState предыдущей странице и т. Д.

Использование Server.Transfer будет иметь тот же эффект, что и обработка POST на исходной странице.

Вы можете использовать переменные Session для хранения данных POST, но это воняет.

0 голосов
/ 28 мая 2009

Я думаю, что вы все еще можете использовать метод 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>

Примечание: Я использовал пробел перед каждым "<", иначе код выше не будет виден. </p>

код за страницей (только событие нажатия кнопки):

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=

...