2017-05-05 40 views
0
public class CheckCreditNumberAttribute : ValidationAttribute 
{ 
    public CheckCreditNumberAttribute() 
    : base("Not a valid Account Number.") 
     {} 
    protected override ValidationResult IsValid(object value, ValidationContext validationContext) 
    { 
    if(value!=null) 
     { 
      string input = value.ToString(); 
      int i; 
      int sum = 0; 
      int count = 1; 
      for(i=input.Length-1;i>=0;i--) 
      { 
       if(count%2!=0) 
       { 
        sum += i; 
       } 
       else 
       { 
        int newNum = i * 2; 
        if(newNum>9) 
        { 
         newNum -= 9; 
        } 
        sum += newNum; 
       } 
       count++; 
      } 
      if(sum%10==0) 
      { 
       return ValidationResult.Success; 

      } 
      else 
      { 
       var errorMessage = FormatErrorMessage(validationContext.DisplayName); 
       return new ValidationResult(errorMessage); 
      } 

     } 
     return ValidationResult.Success; 
    } 
} } 

上面是一个自定义注记类。在asp.net中的自定义注释不工作?

这是在模型类中。此注释在运行时不起作用。

[Required(ErrorMessage = "Account Number is Required")] 
[CheckCreditNumber(ErrorMessage = "Not a valid Account Number.")] 
[Display(Name = "Bank Account Number")] 
[RegularExpression(@"\d{14,16}",ErrorMessage ="Account number should be of 14-16 digits.")] 
public string BankAccountNumber { get; set; } 

这里CheckCreditNumber是继承validate Attribute类的类。 请建议正确的解决方案!谢谢

+0

当您发布时,您的CheckCreditNumberAttribute.IsValid函数是否被击中? – User3250

+0

不,那是我的问题。它没有被击中。 –

+0

请发布您的控制器操作方法。 – User3250

回答

0

好的,继续在操作方法DonateGroup()中使用Model类的名称。

然后尝试创建适配器类的属性是这样的:

public class CheckCreditNumberAttributeAdapter : System.Web.Mvc.DataAnnotationsModelValidator<CheckCreditNumberAttribute> 
{ 
    public CheckCreditNumberAttributeAdapter(System.Web.Mvc.ModelMetadata metadata, ControllerContext context,CheckCreditNumberAttribute attribute) 
     : base(metadata, context, attribute) 
    { 


    } 

    public static void SelfRegister() 
    { 
     System.Web.Mvc.DataAnnotationsModelValidatorProvider 
      .RegisterAdapter(
       typeof(CheckCreditNumberAttribute), 
       typeof(CheckCreditNumberAttributeAdapter)); 
    }   
} 

然后在Global.asax.cs中的Application_Start功能寄存器

CheckCreditNumberAttributeAdapter.SelfRegister(); 

希望工程。