2

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

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

4

2 回答 2

2

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

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

于 2013-03-03T18:29:40.033 回答
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"/>
}
于 2013-03-03T18:47:58.920 回答