您需要使用發佈重定向獲取PRG模式。
請通過卡子門祖爾拉希德閱讀這篇博客這個使用PRG模式的數據修改部分。
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
視圖。
<%@ 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>
- 的
ImportModelStateFromTempData
和ExportModelStateToTempData
屬性有助於傳輸模式重定向之間 狀態錯誤。此
<% ViewContext.FormContext.ValidationSummaryId = "valSumCreateForm"; %>
將MVC表單與其相應的驗證摘要關聯。
您可以通過我在此點擊此處查看其它答案爲好。 ViewModel with SelectList binding in ASP.NET MVC2
讓我知道你是否有任何問題。
-Soe
Tempdata不是最好的選擇,應該避免它。請參閱以下爲什麼tempdata不好:http://jonkruger.com/blog/2009/04/06/aspnet-mvc-pass-parameters-when-redirecting-from-one-action-to-another/ – 2011-06-09 12:36:03
In在你提到的文章中描述的例子中,TempData仍然在使用,它只是被包裝,因此它沒有被明確地引用。即使在這種方法中,TempData也是傳遞這類數據的正確機制;區別在於你如何使用TempData。 – 2011-06-10 17:12:48