使用数据注释和代码的自定义验证属性

Posted

技术标签:

【中文标题】使用数据注释和代码的自定义验证属性【英文标题】:Custom validation attribute using data annotations and code first 【发布时间】:2011-08-03 16:47:43 【问题描述】:

我在 C# 4.0 中使用 customvalidation 属性编写了一个自定义验证方法。我正在使用 Entity Framework 4.1 的代码。但是,自定义验证属性方法是静态的。如何在引用同一类中的其他非静态字段的同时验证我的类中的一些其他逻辑。

public class Foo

   [CustomerValidation(typeOf(Foo), "ValidatePoints"]
   public string Points  get; set; 

   public string AdvancedPoints  get; set;

   public static ValidationResult ValidatePoints(string _Name)
   
       if (_Name != AdvancedPoints) //Note that AdvancedPoints here is non-static and                                         should not be here. but i want to know how i can achieve this. 
            
           return ValidationResult.Success;
       
       else
           return new ValidationResult("Wrong entry");

【问题讨论】:

【参考方案1】:

你可能想看看IValidatableObject

http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.ivalidatableobject.aspx

它允许您为给定的类添加类或多属性验证。

【讨论】:

【参考方案2】:

您可以使用包含静态方法的类。并使用该方法来验证类,如下所示:

 [CustomValidation(typeof(Validate_Foo), "Validate")]
 public class Foo 

 public class Validate_Foo

    public static ValidationResult Validate(Foo obj, ValidationContext vc)
    
         return ValidationResult.Success;
         //or return new ValidationResult("Error"); 
    

【讨论】:

以上是关于使用数据注释和代码的自定义验证属性的主要内容,如果未能解决你的问题,请参考以下文章

具有客户端验证的自定义数据注释验证属性

java注释的自定义

csharp 自定义数据注释验证属性,用于验证数据是两个字符的美国州名缩写。

HTML5的自定义属性data-*详细介绍和JS操作实例

ASP.Net-Core 中的自定义身份验证

地图注释的自定义标题