我有一个简单的模型FilesModel
更新字符串Description
和复选框Archived
的几个(已上传)文件的布尔值,并FilesModel
有一个验证FilesModelValidator
当这些数据被发布时它会运行。这个验证器不过是检查每个文件是否有描述。我知道它运行并根据我的调试到目前为空描述正确返回一个错误。MVC验证错误的时间控制消失给予控制器
但是,当控制器中的Action方法被给予控制时,ModelState与我所期望的不同。说明字段上没有错误,但每个选中的复选框都有一个错误:“'上'的值对存档无效。”
验证此类工作在网站的其他方面工作得很好,所以我确定有一些我可以忽略的东西。任何有关为什么会发生这种情况的建议以及如何解决它?
验证
public FilesModelValidator()
{
RuleFor(f => f.Files)
.Must(AllHaveADescription).WithMessage("Must have a description");
}
public static bool AllHaveADescription(Files files)
{
// This is run on postback, and returns false when any Description is empty
return files.All(f => f.Description != null && f.Description.Length > 0);
}
控制器
[HttpPost]
public virtual ActionResult Update(FilesModel model)
{
// At this point, ModelState contains an error for each checked checkbox
// and no errors for empty descriptions
if (ModelState.IsValid)
{
// Save
}
return View(model);
}
你怎么会有你的验证器连接好?属性属性还是只是一些基于实体的逻辑? – jeriley 2010-04-27 18:40:51
属性。以下是'FilesModel'类的属性:'[Validator(typeof(FilesModelValidator))]' – Aaron 2010-04-27 18:42:03
它可以简单地运行验证两次并删除您的退出错误? (使用自定义模型绑定器可能?)另外,我依稀记得有关注册数据注释(?)的东西..但这会给你所有的问题,并且你正在使用一个以上的权利? – jeriley 2010-04-27 19:48:54