我一直在尝试遵循Web上的验证教程和示例,例如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; }
}
每当我进入一个无效的年龄(因为年龄被声明为int)如“xxx”(非整数),视图确实在屏幕顶部正确显示消息“编辑失败,更正错误并重试”,以及突出显示Age文本框并放置一个红色星号在它旁边,指出错误。但是,没有错误消息列表与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 2009-09-01 18:59:34
你知道在MVC3中是否有这样做的方法?我即将创建一个全局动作过滤器,从我的异常复制到ErrorMessage属性,但似乎很奇怪,我应该! – mcintyre321 2011-09-26 14:13:07