2011-08-11 7 views
7

I utilisent Asp.net MVC 3, face à problème de validation avec DataAnnotations comme ci-dessousAsp.net MVC 3 validation conditionnelle avec DataAnnotations

Nous avons maintenu le modèle dans le projet de bibliothèque distincte, la hiérarchie de classe modèle est comme ci-dessous

public class EditAlternateMailingAddressModel : BaseModel 
{ 
    public UserAddressDetails AlternateAddressDetails { get; set; } 

    public List<UsState> StateList { get; set; }   
} 

maintenant userAddressDetails est défini comme ci-dessous

public partial class UserAddressDetails 
    { 
     public string DeliveryLine { get; set; } 
     public string Zip { get; set; } 
     public bool IsDefaultMailingAddress { get; set; }   
    } 

logique de validation sont définis dans la classe séparée comme ci-dessous

[MetadataType(typeof(UserAddressDetailsMetaData))] 
public partial class UserAddressDetails 
{ 
    private class UserAddressDetailsMetaData 
    { 

     [Required(ErrorMessage = "Please enter address.")] 
     public string DeliveryLine { get; set; } 

     [Required(ErrorMessage = "Please enter city.")] 
     public string City { get; set; } 
     public bool IsDefaultMailingAddress { get; set; 
} 

en vue de modifier, DeliveryLine, Zip dépendent IsDefaultMailingAddress que ces champs doivent être fournis si IsDefaultMailingAddress est vrai, sinon laissez-forme à soumettre.

pour l'ouverture et la soumission partielle des formulaires que nous utilisons jQuery.

Nous avons déjà essayé ci-dessous http://andrewtwest.com/2011/01/10/conditional-validation-with-data-annotations-in-asp-net-mvc/ http://blogs.msdn.com/b/simonince/archive/2010/06/04/conditional-validation-in-mvc.aspx

mais ceux-ci validation sont mis le feu côté serveur, nous avons besoin de le faire fonctionner sur le côté client.

+0

Avez-vous vu http://stackoverflow.com/questions/ 4833280/asp-net-mvc-3-discret-personnalisé-client-validation? – Jack

Répondre

2

Vous devez créer votre propre ValidationAttribute personnalisé. Si vous souhaitez valider le client, votre attribut doit implémenter l'interface IClientValidatable et vous devez écrire un validateur côté client personnalisé.

Mise à jour: exemples de code ajouté

mise en œuvre validateur:

public class CustomRequiredAttribute : ValidationAttribute, IClientValidatable 
{ 
    protected override ValidationResult IsValid(object value, ValidationContext validationContext) 
    { 
     // your validation logic here 
     return ValidationResult.Success; 
    } 

    public override IEnumerable<ModelClientValidationRule> GetClientValidationRules() 
    { 
     return new[] {new CustomRequiredValidationRule (ErrorMessage)}; 
    } 
} 

public class CustomRequiredValidationRule : ModelClientValidationRule 
{ 
    public RequiredIfVisibleValidationRule(string errorMessage) 
    { 
     ValidationType = "customRequire"; 
     ErrorMessage = errorMessage; 
    } 
} 

Ajout validateur côté client:

(function ($) { 
    $.validator.addMethod('customRequire', function (value, element) { 
     // your validation logic here 
     return true; // true if valid, otherwise false 
    }); 
    $.validator.unobtrusive.adapters.add('customRequire'); 
})(jQuery); 
+0

En rapport http://stackoverflow.com/questions/7025198/mvc3-custom-validation-compare-two-dates – hazzik

Questions connexes