xVal 错误消息出现两次
我正在尝试使用 ASP.NET MVC 2 Preview 1 项目设置 xVal。 我基本上遵循 http://blog.codeville.net/2009/01/10/xval-a-validation-framework-for-aspnet-mvc/ 信中(仅限服务器端,到目前为止)。
我已经注释了 BlogPost 实体,这是 Post 操作:
[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 是示例博客文章中的逐字记录)。 当我提交完全无效的 BlogPost 表单时,我收到以下验证错误列表:
- 需要一个值。
- 请输入标题
- 请输入发布日期
- 请输入一些内容
- 请输入标题
- 请输入发布日期
- 请输入一些内容
我什至不知道第一条消息的用途,但如您所见,出现了其他错误两次。 我究竟做错了什么? 或者这是 MVC V2 的问题?
I'm trying to setup xVal with an ASP.NET MVC 2 Preview 1 project. I'm basically following the example at http://blog.codeville.net/2009/01/10/xval-a-validation-framework-for-aspnet-mvc/ to the letter (server-side only, so far).
I have annotated a BlogPost entity, and here is the Post action:
[HttpPost]
public ActionResult Index(BlogPost b)
{
try
{
_blogService.Insert(b);
}
catch (RulesException ex)
{
ex.AddModelStateErrors(ModelState, "");
}
return (View(b));
}
And here's the service method:
public void Insert(BlogPost post)
{
var errors = DataAnnotationsValidationRunner.GetErrors(post);
if(errors.Any())
{
throw new RulesException(errors);
}
_blogRepo.Insert(post);
}
(Note that the DataAnnotationsValidationRunner is verbatim from the example blog post). When I submit a totally invalid BlogPost form, I get this list of validation errors:
- A value is required.
- Please enter a title
- Please enter a posted date
- Please enter some content
- Please enter a title
- Please enter a posted date
- Please enter some content
I don't even know what the first message is for, but as you can see, the other errors are appearing twice. What am I doing wrong? Or is this a problem with MVC V2?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
从 ASP.Net MVC 2 Preview 1 开始,我们现在获得开箱即用的 DataAnnotation 验证支持,所以我猜您的问题是,当 ModelBinder 逻辑运行时,它正在应用 DataAnnotation 规则:
然后使用您的 XVal 逻辑请求检查再次:
这得到了它们以相同顺序重复的事实的支持。
您的代码在 MVC 版本 1 中可以正常工作,因为 public ActionResult Index(BlogPost b) 不会运行 DataAnnotation 规则。 我没有读过任何地方是否可以关闭新的 DataAnnotation 逻辑并仅使用 XVal。
有关此内容的更多信息,请参见 Scott 的可发布预览 1
要找出第一个项目,请运行调试并检查 ModelState 上有哪些错误,因为这将告诉您错误与对象上的哪个属性相关。
Starting in ASP.Net MVC 2 Preview 1 we now get DataAnnotation validation support out of the box, so I guess your issue is that when the ModelBinder logic runs it is applying the DataAnnotation rules:
and then with your XVal logic you are requesting the check again:
This is backed up by the fact they are repeated in the same order.
Your code would have worked fine in version 1 of MVC as public ActionResult Index(BlogPost b) would not have run the DataAnnotation rules. I have not read anywhere if it is possible to turn off the new DataAnnotation logic and just use XVal.
There is more information about this on Scott's post able preview 1
To find out what the first item is run debug and check what errors are on the ModelState, as this will tell you what property on the object the errors are related to.