我有一个从IValidateableObject派生的视图模型类,并且正在将Validate方法与ValidationContext一起使用,以从控制器中对其进行评估。

我希望能够针对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);


更新#2-我试图走上使用自定义模型活页夹的道路,但我也碰到了这堵墙-似乎没有一种方法可以简单地将项目添加到ValidationContext然后调用基。 OnModelUpdated(controllerContext,bindingContext)方法。

最佳答案

如果您要构建自己的模型验证器,请查看this question。如果听起来工作量太大,请尝试FluentValidation项目,该项目可让您向视图模型添加自定义验证规则,并将其存储在自己的类中。

关于c# - 在IValidatableObject上设置ValidationContext的Items集合吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17354169/

10-11 17:18