如何在不使用Response.Redirect的情况下“返回”

时间:2009-07-17 10:09:53

标签: c# asp.net html forms

我有一个用aspx页面处理的html表单。如果aspx页面上的验证返回false(我不能使用javascript来验证html表单),我希望能够返回到我的html表单。我不能使用Response.Redirect,因为我将丢失最初在html表单上输入的数据。

设置为:

  • form.html(将表单标记的动作属性设置为processform.aspx)
  • processform.aspx(使用Request.Form [“myvalue”]从html表单获取值)

如果值无效,请返回到form.html,否则为Response.Redirect(“success.html”)

也许我只是以错误的方式解决这个问题。有谁能提出更好的方法?

请注意:我不能在form.html上使用javascript,但我可以在processform.aspx页面上使用javascript - 尽管如果可能的话我会更喜欢替代。

7 个答案:

答案 0 :(得分:2)

你说form.html不能在form.html上使用任何javascript - 这是否意味着你不能在这个解决方案中使用Javascript?

我的回答是从您的processform.aspx输出一个只调用history.go(-1)的javascript片段。

示例:

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 :(得分:1)

如果您使用的是MVC,则必须从Request.Form中提交的值重新填充模型。

如果您正在使用经典WebForms,则需要生成form.html,将以前提交的值动态插入其中。

您可以将提交的值放入会话中:

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

然后你重定向到你的form.aspx:

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

然而,这将以form.aspx的形式返回页面。但它不应该是一个真正的问题,它只是名称。

答案 2 :(得分:1)

我的方法是让表单提交给自己 - 即<form action="" method="POST">。如果使用GET检索表单,则只显示自身。如果使用POST检索它,它将验证发布的信息,如果有任何问题,则重新显示GET,但标记错误(并保留用户的输入)。如果没有验证错误,它会对信息执行任何操作,然后使用Response.Redirect()将用户发送到成功提交后的下一页。

答案 3 :(得分:1)

我会看Server.Transfer。它将在内部将请求重新路由到另一个页面而不进行重定向。使用此选项转移到包含表单HTML的页面。

答案 4 :(得分:0)

如何将表单发布到另一个目标?例如。 form target =“_ blank”

在新窗口中,执行表单数据处理,然后根据结果操作html表单页面。

这是不整洁的,但可能只对你有用。

PS:请注意,HTML 4.01中不推荐使用表单目标属性。

答案 5 :(得分:0)

将两个文件合并为一个,并在表单中显示已发布的值。例如。 <input type="text" name="lorem" value="<?=Request.Form["lorem"] ?? "default value" ?>">

如果您的表单位于“哑”html文件中,您将无法通知用户任何验证错误,因此如果用户输入错误数据并提交表单,他们将返回到表单任何关于出了什么问题的信息,这都是禁忌!

答案 6 :(得分:0)

只需添加此内容即可以在以后找到。

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 以及我们的员工访问信息列表中央服务器。