如何在两个视图模型之间建立验证依赖关系?

时间:2012-04-04 15:47:05

标签: asp.net-mvc validation data-annotations

我向上帝发誓,我在其中一篇MSDN文章中看到了类似下面的内容,但我无法在任何地方找到此属性文档。

public class MyViewModel{
   [Required]
  public bool Important {get;set;}

 [ValidationDependsOn("Important")]
  public bool HasVIPAccess {get;set;}

}

如果你看一下上面的代码(可能是一个不好的例子),我试图在这两种属性之间建立一种关系,以便HasVIPAccess属性的验证取决于名为Important的属性的验证。

3 个答案:

答案 0 :(得分:3)

执行此类操作的内置验证属性为[Compare("OtherProperty")],这意味着您将此属性设置为的属性必须等于OtherProperty

public class MyViewModel{
   [Required]
  public bool Important {get;set;}

 [Compare("Important")]
  public bool HasVIPAccess {get;set;}

}

注意:需要MVC 3 +

如果您想要其他验证属性,可以查看Mvc.ValidationTookit


如果你想了解它背后的科学

这是mvc3的新功能,您可以在mvc3中轻松实现这样的自定义属性

因为IsValid现在收集一个ValidationContext参数,该参数包含有关正在执行的验证的信息,如模型的类型和与之关联的元数据,因此您可以使用反射来获取其他属性及其值,CompareAttribute使用此功能

答案 1 :(得分:1)

答案 2 :(得分:0)

您可以通过编写自定义验证属性来执行此操作(这仅启用服务器端验证)...以下是相关帖子Creating New Data Annotation Validation Attributes in MVC

但是......如果你想让客户端不显眼的验证工作,那么你需要做一些javascript工作......这是另一篇关于创建不引人注意的客户端验证的帖子...... {{3 }}