2010-07-27 81 views
0

我试图做一个验证器,以确保至少有2个项目被选中。验证器在服务器端正常工作,但客户端代码从未得到执行。ASP.NET MVC 2.0自定义客户端验证

下面是代码:

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

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

     return function (value, context) { 

      if (value >= min) return true; 

      return rule.ErrorMessage; 

     }; 
    }; 

这里是验证码:

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 }; 
     } 


    } 

我甚至登记在Global.asax文件验证适配器:

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

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

我认为验证器只适用于具有像文本框等值属性的元素

更新1:

EnableClientValidation正确地调用所有必需的JS文件包含在项目中。似乎我需要将onblur附加到上下文中。我会尝试并发布结果。

回答

0

我认为这是因为默认验证是在输入文本框的onblur事件上调用的。而对于列表框,这个事件并没有被抛出。

0

​​需要在您的视图的某个地方。还要确保你在相同的视图中(在你的js函数之前)引用MicrosoftAjax.jsMicrosoftMvcValidation.js

+0

查看我更新的帖子!调用EnableClientValidation并进行所有引用。 – azamsharp 2010-07-27 19:33:00