我有一个从IValidateableObject派生的视图模型类,我使用带有ValidationContext的Validate方法从我的控制器中评估它。
我希望能够在ObjectInstance中测试更多视图模型类本身的属性。我可以将这些东西添加到模型中,然后一切都很简单,但我不觉得这些东西真的属于视图模型类,因为它们更多的是关于该对象的当前状态。
我想知道ValidationContext中的Items集合是否适合存储这样的东西......唯一的问题是我似乎无法找到解释如何向该字典添加内容的资源。
这有意义吗?任何人都可以在检查对象的ModelState之前提供如何填充ValidationContext.Items的解释吗?
更新#1 - 我在一篇关于EF CTP5()的旧博客文章中找到了以下内容,但我不确定如何使用这些信息:
因此,可以使用自定义验证逻辑来完全替换内置验证或过滤掉内置验证返回的一些验证错误。关于DbContext.ValidateEntity(http://blogs.msdn.com/b/adonet/archive/2010/12/15/ef-feature-ctp5-validation.aspx)方法的另一个细节是这个方法的第二个参数,如下所示:
IDictionary<object, object> items
默认情况下,其值始终为null。无论如何压倒一切 DbContext.ValidateEntity()允许将非null值传递给它 调用方法:
return base.ValidateEntity(entityEntry, myItems);
UPDATE#2 - 我试图沿着使用自定义模型绑定器的路径走下去,但我也遇到了这样的问题 - 似乎没有办法简单地将项目添加到ValidationContext然后调用base.OnModelUpdated(controllerContext,bindingContext)方法。
答案 0 :(得分:0)
如果您在构建自己的模型验证器之后,请查看this question。如果这听起来太多了,可以尝试使用FluentValidation项目,这样您就可以在视图模型中添加自定义验证规则并将它们存储在自己的类中。