2017-05-05 1 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; 
    } 
} } 

Oben ist eine benutzerdefinierte Annotationsklasse.Benutzerdefinierte Annotation in asp.net funktioniert nicht?

Dies ist in einer Modellklasse. Diese Annotation funktioniert nicht zur Laufzeit.

[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; } 

Hier CheckCreditNumber ist eine Klasse erben validieren Attributklasse. Bitte schlagen Sie die richtige Lösung vor! Vielen Dank

+0

Wird Ihre CheckCreditNumberAttribute.IsValid-Funktion beim Post-Zugriff ausgelöst? – User3250

+0

Nein, das ist mein Problem. Es wird nicht getroffen. –

+0

Bitte geben Sie Ihre Controller-Aktionsmethode an. – User3250

Antwort

0

Ok, verwenden Sie weiterhin Model Klassenname in Aktion Methode DonateGroup().

versuchen dann, wie diese Adapter-Klasse für Ihr Attribut erstellen:

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)); 
    }   
} 

Und dann registrieren in Global.asax.cs Application_Start Funktion

CheckCreditNumberAttributeAdapter.SelfRegister(); 

Hoffe, dass es funktioniert.

Verwandte Themen