Я пытался отслеживать учебные руководства и примеры в Интернете, например, от David Hayden's Blog и официального ASP.Net MVC Tutorials, но я не могу получить код ниже для отображения фактических ошибок проверки. Если у меня есть мнение, что выглядит примерно так:ASP.NET MVC: сообщения проверки, установленные в TryUpdateModel, не отображаются ValidationSummary
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MvcApplication1.Models.Parent>" %>
<%-- ... content stuff ... --%>
<%= Html.ValidationSummary("Edit was unsuccessful. Correct errors and retry.") %>
<% using (Html.BeginForm()) {%>
<%-- ... "Parent" editor form stuff... --%>
<p>
<label for="Age">Age:</label>
<%= Html.TextBox("Age", Model.Age)%>
<%= Html.ValidationMessage("Age", "*")%>
</p>
<%-- etc... --%>
Для модели класса, который выглядит следующим образом:
public class Parent
{
public String FirstName { get; set; }
public String LastName { get; set; }
public int Age { get; set; }
public int Id { get; set; }
}
Всякий раз, когда я ввожу неверный возраст (поскольку Возраст объявлен как межд), например, «xxx» (не целое число), вид делает правильно отображать сообщение «Редактировать было неудачно. Исправить ошибки и повторить попытку» в верхней части экрана, а также выделить текстовое поле «Возраст» и поместить красную звездочку рядом с ним, указав ошибку. Однако с помощью ValidationSummary не отображается список сообщений об ошибках. Когда я делаю свою собственную проверку (например: для LastName ниже), сообщение отображается правильно, но встроенная проверка TryUpdateModel не отображает сообщение, когда поле имеет незаконное значение.
Здесь действие вызывается в мой код контроллера:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult EditParent(int id, FormCollection collection)
{
// Get an updated version of the Parent from the repository:
Parent currentParent = theParentService.Read(id);
// Exclude database "Id" from the update:
TryUpdateModel(currentParent, null, null, new string[]{"Id"});
if (String.IsNullOrEmpty(currentParent.LastName))
ModelState.AddModelError("LastName", "Last name can't be empty.");
if (!ModelState.IsValid)
return View(currentParent);
theParentService.Update(currentParent);
return View(currentParent);
}
Что я пропустил?
Я пришел к этому самому осознанию, но через небольшое испытание и ошибку. Ваш №2 примерно то, что мне пришлось сделать. – Funka
Знаете ли вы, есть ли способ сделать это в MVC3? Я собираюсь создать глобальный фильтр действий, который копирует из моего исключения в свойство ErrorMessage, но кажется странным, что я должен буду! – mcintyre321