2010-07-27 15 views
0

J'essaie de créer un validateur qui s'assurera qu'au moins 2 éléments sont sélectionnés. Le validateur fonctionne correctement côté serveur mais le code côté client n'est jamais exécuté.Validation de client personnalisé ASP.NET MVC 2.0

Voici le code:

Sys.Mvc.ValidatorRegistry.validators["country"] = function (rule) { 

     var min = rule.ValidationParameters["min"];   

     return function (value, context) { 

      if (value >= min) return true; 

      return rule.ErrorMessage; 

     }; 
    }; 

Et voici le code du validateur:

public class CountryValidator : DataAnnotationsModelValidator<CustomValidations.CountryAttribute> 
    { 
     private int _minimum; 
     private string _message; 

     public CountryValidator(ModelMetadata metadata, ControllerContext context, CustomValidations.CountryAttribute attribute) : base(metadata,context,attribute) 
     { 
      _minimum = attribute.Minimum; 
      _message = attribute.ErrorMessage; 
     } 

     public override IEnumerable<ModelClientValidationRule> GetClientValidationRules() 
     { 
      var rule = new ModelClientValidationRule() 
      { 
       ErrorMessage = _message, 
       ValidationType = "country" 
      }; 

      rule.ValidationParameters.Add("min", _minimum); 
      return new[] { rule }; 
     } 


    } 

J'ai même enregistré l'adaptateur de validation dans le fichier global.asax:

protected void Application_Start() 
     { 
      AreaRegistration.RegisterAllAreas(); 
      RegisterRoutes(RouteTable.Routes); 

      DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(AgeAttribute), typeof(AgeValidator)); 
      DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(CountryAttribute),typeof(CountryValidator)); 
     } 

Je pense que le validateur ne fonctionne qu'avec les éléments qui ont une propriété value comme les textboxes, etc.

MISE À JOUR 1:

EnableClientValidation est invoqué correctement et tous les fichiers JS requis sont inclus dans le projet. Il semble que j'ai besoin d'attacher l'onblur au contexte. Je vais essayer cela et afficher les résultats.

Répondre

0

Je pense que c'est parce que la validation par défaut est invoquée sur l'événement onblur de la zone de saisie. Et pour une liste, cet événement n'a pas été lancé.

0

<% =Html.EnableClientValidation(); %> doit être à votre avis quelque part. Assurez-vous également de faire référence à MicrosoftAjax.js et MicrosoftMvcValidation.js dans la même vue (avant votre fonction js).

+0

Voir ma mise à jour! EnableClientValidation est appelée et toutes les références sont faites. – azamsharp