Asp.net mvc 在MVC中发布表单后如何防止页面刷新时数据库中出现重复条目

Asp.net mvc 在MVC中发布表单后如何防止页面刷新时数据库中出现重复条目,asp.net-mvc,Asp.net Mvc,我正在提交MVC4.0中提交事件的表单。提交表单后,表单将发布到其操作并创建记录。在刷新页面时创建记录后,将创建另一个重复记录 我已经使用了以下方法,但没有成功: ModelState.Clear(); ModelState.SetModelValue("Key", new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture)); ModelState.Remove("Key"); 我不想使用AJAX表单Po

我正在提交MVC4.0中提交事件的表单。提交表单后,表单将发布到其操作并创建记录。在刷新页面时创建记录后,将创建另一个重复记录

我已经使用了以下方法,但没有成功:

ModelState.Clear();
ModelState.SetModelValue("Key", new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture));
ModelState.Remove("Key");
我不想使用AJAX表单Post,也不想在另一个页面上重定向

我们在asp.net中有没有像
这样的方法!mvc4.0中的Page.IsPostBack()

我也不想使用会话


(微软吹嘘MVC没有任何像asp.net这样的视图状态,但现在我不这么认为)。

成功更新后,您可以重定向到索引操作。在这种情况下,refresh将向index操作重新发送请求,而不是post to update操作。这种模式称为“Post-Redirect-Get”模式。 例如:


您可以使用Ajax.post提交表单。构建表单标签,如下所示

@using (@Html.BeginForm("Index", "ControllerName", FormMethod.Post, new { id = "anyFormName" }))
[HttpPost]
public ActionResult Index(FormCollection fc)
{
   // Put the form post logics here....
   // Build the model for the view...
   return PartialView("Index", model);
}
从页面调用ajax帖子

$.ajax({
        url: "/ControllerName/Index",
        type: "POST",
        data: $("#anyFormName").serialize(),
        success: function (data) {
            $("#divFormContainer").html(data);
        }
    });
在控制器中,创建如下所示的索引方法

@using (@Html.BeginForm("Index", "ControllerName", FormMethod.Post, new { id = "anyFormName" }))
[HttpPost]
public ActionResult Index(FormCollection fc)
{
   // Put the form post logics here....
   // Build the model for the view...
   return PartialView("Index", model);
}

即使您编写的代码是这样写的,Page.IsPostBack也不能阻止这一点!Page.IsPostBack,当浏览器重新执行相同的请求测试时,它将是一个回发,并将再次插入记录。我要求类似这样的解决方案!Page.IsPostBack()状态将保存在哪里?浏览器在重新加载页面时不会修改请求,我假设您没有会话,没有cookie。因此,服务器端永远不会知道它是重复的。您必须写入数据库或重定向到某个位置,或将此状态存储到其他位置。我已经用mymodel=new mymodel()重新加载页面。请写下您的详细代码,我认为这应该有助于回答您的问题。