您需要使用 Post Redirect Get PRG 模式。
请阅读这个使用PRG模式进行数据修改这篇博文中的部分由卡齐·曼祖尔·拉希德.
http://weblogs.asp.net/rashid/archive/2009/04/01/asp-net-mvc-best-practices-part-1.aspx http://weblogs.asp.net/rashid/archive/2009/04/01/asp-net-mvc-best-practices-part-1.aspx
这种方法使用TempData
维持ModelState
重定向之间的数据。
[HttpPost, ValidateAntiForgeryToken, ExportModelStateToTempData]
public ActionResult Create(FormCollection form)
{
Product p = new Product();
if (TryUpdateModel<IProductModel>(p))
{
productRepository.CreateProduct( p );
}
else
{
// add additional validation messages as needed
ModelState.AddModelError("_generic", "Error Msg");
}
return RedirectToAction("Index");
}
这是你的Index
动作方法。
[ImportModelStateFromTempData]
public ActionResult Index()
{
IList<Product> products = productRepository.GetAll();
return View("Index", products);
}
这是你的Index
view.
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IList<Product>>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Index
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>Products</h2>
<% foreach (var p in Model) { %>
<div><%= Html.Encode( p.ProductName ) %></div>
<% } %>
<%= Html.ValidationSummary("Please correct the errors", new { id = "valSumCreateForm" }) %>
<% using (Html.BeginForm("Create", "Product")) { %>
Product Name: <%= Html.TextBox("ProductName") %>
<%= Html.AntiForgeryToken() %>
<% ViewContext.FormContext.ValidationSummaryId = "valSumCreateForm"; %>
<% } %>
</asp:Content>
- The
ImportModelStateFromTempData
and ExportModelStateToTempData
属性有助于模型迁移
状态重定向之间的错误。这
-
<% ViewContext.FormContext.ValidationSummaryId = "valSumCreateForm"; %>
将 MVC 表单与其相应的验证摘要相关联。
您也可以在这里查看我对此的另一个答案。ASP.NET MVC2 中具有 SelectList 绑定的 ViewModel https://stackoverflow.com/questions/2333305/viewmodel-with-selectlist-binding-in-asp-net-mvc2/3073579#3073579
如果您有任何疑问,请告诉我。
-Soe