2009-07-17 50 views
1

我有用aspx页面处理的html表单。如果aspx页面的验证返回false(我无法使用javascript验证html表单),我希望能够返回到我的html表单。我无法使用Response.Redirect,因为我将失去最初在html表单中输入的数据。如何在不使用Response.Redirect的情况下“返回”

的设置是:

  • form.html(form标签的集合action属性到processform.aspx)
  • processform.aspx(使用的Request.Form [“myvalue的获得从HTML表单值“])

如果值是无效的,回去form.html,否则的Response.Redirect(” success.html“)

也许我只是要对这个错误的方式。任何人都可以提出更好的方法?

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

回答

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“无内容” - 您可以尝试发送该消息,但这是成功状态,浏览器的行为可能会有所不同。但理论上,内容应该保持不变。但是,用户可能会很困惑,因为没有明显的反馈意见。

如果你能解释这些限制背后的推理,也许我们可以提出一个更好的解决方案。

+0

这是一个很好的解决方案,但是我希望不必使用JavaScript的。我无法在form.html中使用javascript,但是我可以在processform.aspx页面中使用javascript。我可能会等一会儿,看看其他人是否有其他想法。这是我在这个网站上的第一个问题,在发布不到10分钟的时间里,我几乎从椅子上掉下了一个很好的答案! – Tim 2009-07-17 10:40:05

+0

欢迎来到开心;) – 2009-07-17 11:15:46

1

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

如果你正在做传统的WebForms,你需要生成你的form.html动态插入之前提交的值。

您可以把您所提交的值到会话:

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

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

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

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

1

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

0

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

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

这是不整洁的,但可能只是为你工作。

PS:请注意表单目标属性在HTML 4.01中已弃用。

0

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

如果您在“哑”html文件中的表单,您将无法通知用户任何验证错误,因此如果用户输入不正确的数据并提交表单,他们将返回到没有任何信息的形式出现了什么问题,这是一个禁忌!

1

我会看看Server.Transfer。它将在不重定向的情况下将请求重新路由到另一个页面。使用它来传输到包含表单HTML的页面。

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与员工访问信息,我们的中央服务器上的列表员工信息匹配。