1

我創建MVC 4自定義validateur:自定義的驗證MVC +驗證客戶端

public class FirstNameValidator : ValidationAttribute 
{ 
    private IRegistrationConfiguration _registrationConfiguration; 
    public string Category { get; set; } 
    public bool IsLocal { get; set; } 
    public FirstNameValidator() 
    { 
     _registrationConfiguration = DependencyResolver.Current.GetService<IRegistrationConfiguration>(); 
    } 
    public FirstNameValidator(IRegistrationConfiguration registrationConfiguration) 
    { 
     _registrationConfiguration = registrationConfiguration; 
    } 

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

      return new ValidationResult("Le prénom ne doit pas être vide"); 
     } 
     else 
     { 
      if(string.IsNullOrEmpty(value.ToString())) 
       return new ValidationResult("Le prénom ne doit pas être vide"); 
       else if(value.ToString().Length<2) 
       return new ValidationResult("Le prénom doit avoir + que 2 caractères"); 
      else if (value.ToString().Length > 30) 
       return new ValidationResult("Le prénom doit avoir - que 30 caractères"); 

     } 

     return null; 

    } 

} 

我的用戶在我的ViewModel這個數據註釋:

public class RegistrationViewModel 
{ 
    public string Country { get; set; } 
    public string Civility { get; set; } 
    [FirstNameValidator(Category = "Registration", IsLocal = false)] 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 

}

我怎麼能做客戶端驗證?

回答

1
  1. 在屬性中實現IClientValidatable。

    公共類FirstNameValidator:ValidationAttribute,IClientValidatable

  2. 編寫JavaScript適配器並將其包含在您的視圖。

  3. 寫javascript驗證規則本身並將其包含在您的視圖中。

您可以搜索「asp.net mvc 4自定義客戶端驗證」瞭解更多詳情。 例如,你可以看看Custom data annotation validatorHow to support client side custom validation

0

根據你寫的代碼,你可能會更好使用RegularExpressionAttribute代替。您可以使用諸如"[A-Za-z]{1,30}$"之類的模式來確保您的名字的長度介於1到30個字符之間。或者,您也可以使用RequiredAttribute將該字段標記爲必填字段。

使用這些驗證器的好處是,它們已經連接到JQuery中的客戶端驗證。

如果您必須使用自己的驗證器,然後實現IClientValidatable,並編寫自定義JQuery驗證適配器。

另外,在我們的項目中,我們使用IsValid()方法中的正則表達式模式匹配器來滾動我們自己的驗證器。然後,我們通過IClientValidatable方法將其與現有的regex驗證器適配器掛鉤。我們這樣做是爲了我們可以控制正在使用的錯誤消息。

public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context) 
{ 
    ModelClientValidationRule rule = new ModelClientValidationRule(); 
    rule.ErrorMessage = ErrorMessages.ClientFieldInputValidation; 
    rule.ValidationType = "regex"; 
    rule.ValidationParameters.Add("pattern", _regEx); 
    yield return rule; 
}