7

şöyle bir ViewModel Verilen:İstemci tarafında bir 'data-val-xx' özniteliği olarak işlenen özel bir ValidationAttribute'u nasıl alabilirim?

public class Login { 
    [Required] 
    public string Username { get; set; } 

    [Required, CustomValidator] 
    public string Password { get; set; } 
} 

Ve (burada Ustura sözdizimi) Böyle bir Görünüm:

@Html.TextBoxFor(f => f.Password) 

Ben şu işaretlemeyi alıyorum: Ancak

<input type="text" 
     value="" 
     data-val-required="This field is required." /> 

Ayrıca, özel doğrulayıcı için bir 'data-' özelliği eklemeyi de isterim.

Böyle bir şey istiyorum:

<input type="text" 
     value="" 
     data-val-required="This field is required." 
     data-val-customvalidator="XYZ" /> 

ASP.NET MVC 3.0 ile bunu başarabilirsiniz?

E.g. Özel doğrulayıcıma bazı özel özellikler eklemem gerekir mi? Ya da bir yere kayıt ettirebilir misin?

cevap

7

Eh, MSDN beni kurtardı (sık sık yaptığı gibi). Bu gibi,

public class CustomAttributeAdapter : DataAnnotationsModelValidator<EmailAttribute> 
{ 
    public CustomAttributeAdapter(
     ModelMetadata metadata, 
     ControllerContext context, 
     CustomAttribute attribute) : 
     base(metadata, context, attribute) 
    { 
    } 

    public override IEnumerable<ModelClientValidationRule> GetClientValidationRules() 
    { 
     ModelClientValidationRule rule = new ModelClientValidationRule() 
     { 
      ErrorMessage = ErrorMessage, 
      ValidationType = "custom" 
     }; 
     return new ModelClientValidationRule[] { rule }; 
    } 
} 

('valReader.ValidationType' bunun işe yaraması için küçük harf olmalıdır ayarı:

http://msdn.microsoft.com/en-us/library/ff398048.aspx

Bu nedenle ilk önce benim doğrulama özelliği için bir adaptör oluşturmak zorunda bir HTML5 özniteliği olarak kullanılacak düzeltme sonrası düzeltme - 'veri-val-özel'.)

O halde tek yapmam gereken uygulamayı Application_Start'a kaydetmektir.

DataAnnotationsModelValidatorProvider.RegisterAdapter(
    typeof(EmailAttribute), 
    typeof(EmailAttributeAdapter)); 

HTML5 doğrulamasıyla çok eğlenmeyi dört gözle bekliyorum. :)