返回时如何防止重新提交表单?

时间:2013-03-03 18:17:04

标签: html asp.net-mvc

我有一些常规输入网页,用户可以在其中键入有关项目的一些详细信息。 然后在用户按下提交按钮后,她被重定向到一个网页,说明一切正常。问题是,如果她点击后退按钮,那么输入页面会再次显示,如果她点击了sumbit,表单将被重新提交,另一个项目正在写入数据库,当然这是不可取的。 / p>

我在C#中使用ASP.NET MVC。处理这种情况的最佳做法是什么?

2 个答案:

答案 0 :(得分:2)

您可以创建一个隐藏的表单元素,将表单标记为唯一。每次表单由服务器写入时,都会创建一个新的随机唯一值。提交表单时,让服务器检查之前是否使用过该标识符。

问题是如果您想允许用户按下并重新提交以创建第二个条目,则无法判断用户是否打算制作第二个副本。在这种情况下你可以做的是创建一个链接,它将用户带到同一个表单,但是新生成的隐藏表单元素包含唯一标识符。

答案 1 :(得分:0)

您可以使用TempDate和隐藏的表单值来存储唯一标记,并在回发时比较它们。

像这样:

public ActionResult FormDemo()
{
    var guid = Guid.NewGuid().ToString();
    ViewData.Model = guid;
    TempData.Add("guid", guid);
    return View();
}

[HttpPost]
public ActionResult FormDemo(string name, string guid)
{
    if(guid != (string)TempData["guid"]) return new HttpStatusCodeResult(500);
    return RedirectToAction("FormDemoReceipt");
}

public ActionResult FormDemoReceipt()
{
    return Content("Form submitted OK!");
}

我的FormDemo视图如下所示:

@using (Html.BeginForm())
{
    @Html.Hidden("guid", Model)
    @Html.TextBox("name");
    <input type="submit"/>
}