Как я могу «Вернуться» без использования Response.Redirect - PullRequest
1 голос
/ 17 июля 2009

У меня есть HTML-форма, которую я обрабатываю со страницей aspx. Я хочу иметь возможность вернуться к моей html-форме, если проверка на странице aspx возвращает false (я не могу использовать javascript для проверки html-формы). Я не могу использовать Response.Redirect, так как потеряю данные, изначально введенные в html-форме.

Настройка:

  • form.html (установить атрибут действия тега формы равным processform.aspx)
  • processform.aspx (получить значения из html-формы, используя Request.Form ["myvalue"])

если значения недопустимы, вернитесь к form.html, в противном случае Response.Redirect ("success.html")

Возможно, я просто ошибаюсь. Кто-нибудь может предложить лучший метод?

Обратите внимание: я не могу использовать javascript в form.html, однако я могу использовать javascript на странице processform.aspx - хотя я бы предпочел альтернативу, если это возможно.

Ответы [ 7 ]

2 голосов
/ 17 июля 2009

Вы говорите, что form.html не может использовать любой javascript для form.html - значит ли это, что вы вообще не можете использовать Javascript в этом решении?

Мой ответ - вывести фрагмент кода javascript из вашего processform.aspx, который просто вызывает history.go(-1).

Пример:

if(valid) 
{
    Response.Redirect("success.html", true);
} 
Response.Clear();
Response.Write("<html><body><script>history.go(-1);</script></body></html>");
Response.Flush();
Response.End(); 

Если, однако, вы вообще не можете использовать Javascript ... варианты довольно ограничены.

RFC 2616 определяет HTTP 204 «Нет содержимого» - вы можете попытаться отправить его, но это состояние успеха, и поведение в браузерах может отличаться. Теоретически, однако, содержание должно оставаться прежним. Однако пользователи могут быть очень смущены, потому что нет видимой обратной связи.

Если бы вы могли объяснить причину этих ограничений, возможно, мы могли бы найти лучшее решение.

1 голос
/ 17 июля 2009

Я бы посмотрел на Server.Transfer. Он внутренне перенаправит запрос на другую страницу без перенаправления. Используйте это, чтобы перейти на страницу, содержащую форму HTML.

1 голос
/ 17 июля 2009

Мой подход заключается в том, чтобы форма отправлялась сама себе, то есть <form action="" method="POST">. Форма, если получена с помощью GET, просто отображает себя. Если он получен с использованием POST, он проверяет опубликованную информацию и, если есть какие-либо проблемы, повторно отображает себя так же, как для GET, но с помеченными ошибками (и с сохранением введенных пользователем данных). Если нет ошибок проверки, он делает все, что делает с информацией, а затем использует Response.Redirect(), чтобы отправить пользователя на следующую страницу после успешной отправки.

1 голос
/ 17 июля 2009

Если вы используете MVC, вам нужно будет пополнить модель по представленным значениям в Request.Form.

Если вы работаете с классическими веб-формами, вам нужно сгенерировать свой form.html, динамически вставляя в него ранее переданные значения.

Вы можете поместить свои отправленные значения в сессию:

Session["UserName"] = Request.Form["UserName"]

Затем вы перенаправляете на свой form.aspx:

<input type="text" value="<%= Session["UserName"]" />

Это, однако, вернет страницу как form.aspx. Но это не должно быть настоящей проблемой, это просто название.

0 голосов
/ 12 марта 2014

Просто добавлю это, чтобы я мог найти его позже.

protected void Page_Load(object sender, EventArgs e) {
  var employee = RequestPermission();
  if (!employee.Authorized) {
    Response.Redirect(Request.UrlReferrer.ToString());
  }
  if (!IsPostBack) {
    //Load the grid for the initial page
  }
}

Это не использует JavaScript (если только базовый Request.UrlReferrer не написан на JavaScript).

ПРИМЕЧАНИЕ: RequestPermissions - это инструмент, который наша компания использует для сопоставления информации о сотрудниках, используя HttpContext.Current.Request.LogonUserIdentity.Name со списком информации о доступе сотрудников на нашем центральном сервере .

0 голосов
/ 17 июля 2009

Объедините два файла в один и покажите опубликованные значения в форме. Например. <input type="text" name="lorem" value="<?=Request.Form["lorem"] ?? "default value" ?>">

Если у вас есть форма в «тупом» html-файле, вы не сможете информировать пользователя о любых ошибках валидации, поэтому, если пользователь введет неверные данные и отправит форму, он вернется в форму без любая информация о том, что пошло не так, и это нет-нет!

0 голосов
/ 17 июля 2009

Как насчет публикации формы в другой цели? Например. form target = "_ blank"

В новом окне выполните обработку данных формы, а затем управляйте страницей HTML в зависимости от результата.

Это неопрятно, но может просто сработать для вас.

PS: обратите внимание, что целевой атрибут формы устарел в HTML 4.01.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...