我在mvc 4.0中提交了一个关于提交事件的表单。提交表单后,将其发布到其操作并创建记录。在刷新页面创建记录后,创建另一个重复记录。
我已经使用过以下但没有成功:
ModelState.Clear();
ModelState.SetModelValue("Key", new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture));
ModelState.Remove("Key");
我不想使用AJAX表单发布,也不想在另一个页面上重定向。
我们是否在mvc4.0中使用像!Page.IsPostBack()
这样的asp.net。
我也不想使用会话。
(微软吹嘘MVC MVC没有像asp.net这样的任何视图状态,但现在我不这么认为。)
答案 0 :(得分: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);
}
答案 1 :(得分: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);
}