xVal错误消息出现两次
问题描述:
我正在尝试使用ASP.NET MVC 2 Preview 1项目设置xVal。我基本上是按照http://blog.codeville.net/2009/01/10/xval-a-validation-framework-for-aspnet-mvc/的例子(仅服务器端,到目前为止)。xVal错误消息出现两次
我已经注释一个博客帖子的实体,这里是邮政动作:
[HttpPost]
public ActionResult Index(BlogPost b)
{
try
{
_blogService.Insert(b);
}
catch (RulesException ex)
{
ex.AddModelStateErrors(ModelState, "");
}
return (View(b));
}
而这里的服务方法:
public void Insert(BlogPost post)
{
var errors = DataAnnotationsValidationRunner.GetErrors(post);
if(errors.Any())
{
throw new RulesException(errors);
}
_blogRepo.Insert(post);
}
(注意DataAnnotationsValidationRunner是逐字从例如博客文章)。当我提交一个完全无效的博文形式,我得到验证错误此列表:
- 的值是必需的。
- 请输入标题
- 请输入一个发布日期
- 请输入一些内容
- 请输入标题
- 请输入一个发布日期
- 请输入一些内容
我甚至不知道第一条消息的用途,但正如你所看到的,其他错误出现两次。我究竟做错了什么?或者这是MVC V2的问题?
答
在ASP.Net MVC 2预览开始1我们现在得到DataAnnotation验证支持开箱即用,所以我想你的问题是,ModelBinder的逻辑运行时,它被应用DataAnnotation规则:
public ActionResult Index(BlogPost b) //Create BlogPost object and apply rules
然后用您的XVal逻辑再次请求检查:
var errors = DataAnnotationsValidationRunner.GetErrors(post);
这是由它们以相同顺序重复的事实来备份的。
您的代码会工作在MVC 1版罚款公众的ActionResult指数(博客帖子B)不会运行DataAnnotation规则。如果可以关闭新的DataAnnotation逻辑并仅使用XVal,我还没有阅读任何地方。
有关于这对Scott's post able preview 1
更多信息要了解的第一个项目运行调试和检查是对的ModelState什么错误,因为这会告诉你的对象是什么性质的错误与。
[HttpPost]
public ActionResult Index(BlogPost b)
{
try
{
_blogService.Insert(b); //Add breakpoint here and check ModelState
}
catch (RulesException ex)
{
ex.AddModelStateErrors(ModelState, "");
}
return (View(b));
}
是的,就是这样。哇,我其实并不认为注释的东西会很容易工作。无论如何,另一个错误是因为我没有设置Id值来使用私有集合(NHibernate POCO)。非常感谢! – 2009-08-10 01:19:22