Вам нужно использовать шаблон Post Redirect Get PRG.
Пожалуйста, прочтите этот Используйте шаблон PRG для модификации данных раздел в этом сообщении в блоге Kazi Manzur Rashid 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 с привязкой SelectList в ASP.NET MVC2
Дайте мне знать, если у вас есть какие-либо вопросы.-Soe