2

我有一个派生自 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() 允许通过调用将非空值传递给此方法:

return base.ValidateEntity(entityEntry, myItems);

更新#2 - 我试图走下使用自定义模型绑定器的道路,但我也遇到了困难 - 似乎没有办法简单地将项目添加到 ValidationContext 然后调用基础。 OnModelUpdated(controllerContext, bindingContext) 方法。

4

1 回答 1

0

如果您正在构建自己的模型验证器,请查看此问题。如果这听起来工作量太大,不妨试试FluentValidation项目,它可以让您将自定义验证规则添加到视图模型并将它们存储在它们自己的类中。

于 2013-06-28T00:50:15.493 回答