2012-12-16 4 views
0

le titre semble un peu étrange désolé pour cela. Eh bien, je suis nouveau dans Asp.net MVC 3. Je veux créer un attribut pour ma seule propriété dont le nom est le numéro d'identité nationale.Comment obtenir une valeur d'une propriété dans actionfilter

public class IdentityNumberControl : ActionFilterAttribute 
{ 
    public string WrongIdentityNumber { get; set; } 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 

     if(???) 
     { 
      filterContext.HttpContext.Response.Write(WrongIdentityNumber); 
      return; 
     } 
     base.OnActionExecuting(filterContext); 
    } 
} 

ma classe membre est ici

public class Member 
{ 
    public int ID { get; set; } 
    [Required(ErrorMessage = "You have to enter your name")] 
    [StringLength(50, ErrorMessage ="Your name length can not be less than{2} more than {1} ", MinimumLength = 3)] 
    [Display("Name :")] 
    public string Name { get; set; } 

    [Required(ErrorMessage = "You have to enter your surname")] 
    [StringLength(40, ErrorMessage = "Your surname length can not be less than{2} more than {1} ", MinimumLength = 2)] 
    [Display("Surname :")] 
    public string SurName { get; set; } 

    [Required(ErrorMessage = "You have to enter your password")] 
    [StringLength(20, ErrorMessage = "Your name lengt can not be less than{2} more than {1} ", MinimumLength = 6)] 
    [DataType(DataType.Password)] 
    [Display("Password :")] 
    public string Password { get; set; } 
    public string PasswordSalt { get; set; } 

    [IdentityNumberControl(WrongIdentityNumber = "It is not a valid identity number")] 
    public double IdentityNumber { get; set; } 

} 

donc je veux vérifier identitynumber est vrai ou non (j'ai une méthode de calcul pour le confirmer) Je sais que je dois écrire du code dans la classe IdentityNumberControl . Mais je ne sais pas comment obtenir la valeur de identitynumber dans la méthode OnActionExecuting.

J'espère expliquer mon problème

+1

okay j'ai découvert la solution. J'ai implémenté ValidationAttribute au lieu de ActionFilterAttribute :) – unbalanced

+0

Si vous avez trouvé votre solution, postez-la comme réponse et acceptez-la. De cette façon, les futurs utilisateurs comprennent comment résoudre le problème. – rae1

Répondre

0

ici est ma solution

public class IdentityNumberAttribute : ValidationAttribute 
{ 
    private string WrongIdentityNumber; 

    public IdentityNumberAttribute(string message) 
    { 
     WrongIdentityNumber = message; 
    } 

    protected override ValidationResult IsValid(object value, ValidationContext validationContext) 
    { 

     string identityNumber = value.ToString(); 

     if (identityNumber.Length != 11) 
      return new ValidationResult(WrongIdentityNumber); 

     int sum = 0; 


     for (int i = 0; i < identityNumber.Length - 1; i++) 
     { 
      sum += Convert.ToInt32(identityNumber[i].ToString()); 
     } 

     return sum.ToString()[1] == identityNumber[10] 
        ? ValidationResult.Success 
        : new ValidationResult(WrongIdentityNumber); 
    } 
} 

il calcule que si le numéro d'identification Natioanal turc valide ou non

vous pouvez utiliser cette attirbute comme ça

[IdentityNumber("It is not a valid identity number")] 
    [Required(ErrorMessage = "You have to enter your identity number")] 
    [DisplayName("National Identity Number:")] 
    public string IdentityNumber { get; set; } 
Questions connexes