2010-07-27 147 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