2

我在 mvc 4.0 中提交有关提交事件的表单。提交表单后发布到其操作并创建记录。在刷新页面时创建记录后,会创建另一个重复记录。

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

ModelState.Clear();
ModelState.SetModelValue("Key", new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture));
ModelState.Remove("Key");

我不想使用 AJAX 表单 Post 也不想重定向到另一个页面。

有什么方法可以像!Page.IsPostBack()在 mvc4.0 中那样在 asp.net 中使用。

我也不想使用会话。

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

4

2 回答 2

2

您可以在成功更新后重定向到索引操作。在这种情况下,刷新将重新发送对索引操作的请求,而不是发布到更新操作。这种模式被称为“Post-Redirect-Get”模式。例子:

[HttpPost]
public ActionResult Update(SomeModelViewClass model)
{
   //some code that save data to db
   return RedirectToAction("index", new {id=model.Id});
}

[HttpGet]
public ActionResult Index(Guid id)
{
   //some code that get data from db by id
   return View(model);
}
于 2013-09-17T07:25:39.043 回答
1

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

@using (@Html.BeginForm("Index", "ControllerName", FormMethod.Post, new { id = "anyFormName" }))

从页面调用 ajax 帖子。

$.ajax({
        url: "/ControllerName/Index",
        type: "POST",
        data: $("#anyFormName").serialize(),
        success: function (data) {
            $("#divFormContainer").html(data);
        }
    });

在控制器中创建 Index 方法,如下所示。

[HttpPost]
public ActionResult Index(FormCollection fc)
{
   // Put the form post logics here....
   // Build the model for the view...
   return PartialView("Index", model);
}
于 2013-10-21T09:55:21.007 回答