1

我向上帝发誓,我在一篇 MSDN 文章中看到过类似(下)的内容,但我在任何地方都找不到此属性文档。

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

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

}

如果您查看上面的代码(可能是一个不好的示例),我正在尝试以这样一种方式建立两个属性之间的关系,即 HasVIPAccess 属性的验证取决于名为 Import 的属性的验证。

4

3 回答 3

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 使用了此功能

于 2012-04-04T16:18:07.313 回答
1

FluentValidation.NET

于 2012-04-04T19:28:08.613 回答
0

您可以通过编写自定义验证属性来做到这一点(这仅启用服务器端验证)......这是一个相关的帖子在 MVC 中创建新的数据注释验证属性

但是...如果您想让客户端不显眼的验证也能正常工作,那么您需要做一些 javascript 工作...这是另一篇关于创建不显眼的客户端验证的帖子...使用 MVC 3进行不显眼的客户端验证

于 2012-04-04T19:26:34.330 回答