我有一个用aspx页面处理的html表单。如果aspx页面上的验证返回false(我不能使用javascript来验证html表单),我希望能够返回到我的html表单。我不能使用Response.Redirect,因为我将丢失最初在html表单上输入的数据。
设置为:
如果值无效,请返回到form.html,否则为Response.Redirect(“success.html”)
也许我只是以错误的方式解决这个问题。有谁能提出更好的方法?
请注意:我不能在form.html上使用javascript,但我可以在processform.aspx页面上使用javascript - 尽管如果可能的话我会更喜欢替代。
答案 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 以及我们的员工访问信息列表中央服务器。