MVC4自定义不显眼的验证器不工作

问题描述:

不知道什么是错的。语法似乎是正确的....但它仍然不会在客户端触发。如果我提交表单,我得到的服务器端验证,客户端没什么......MVC4自定义不显眼的验证器不工作

这里是页面上的代码:

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")"></script> 
<script type="text/javascript"> 
    // we add a custom jquery validation method 
    (function ($) { 
     $.validator.addMethod('additive', function (value, element, params) { 
     //just return false to test it. 
     return false; 
    }); 
    // and an unobtrusive adapter 
    $.validator.unobtrusive.adapters.add("additive", ["field2", "field3", "field4"], function (options) { 
     var params = { 
      field2: options.params.field2, 
      field3: options.params.field3, 
      field4: options.params.field4 
     }; 
     options.rules['additive'] = params; 
     if (options.message) { 
      options.messages['additive'] = options.message; 
     } 
    }); 
}) (jQuery); 
</script> 

下面是是是验证的一部分与客户端(IClientValidatable):

public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context) 
     { 
      ModelClientValidationRule rule = new ModelClientValidationRule 
      { 
       ValidationType = "additive", 
       ErrorMessage = "ERROR MESSAGE" 
      }; 

      rule.ValidationParameters.Add("field2", propName2); 
      rule.ValidationParameters.Add("field3", propName3); 
      rule.ValidationParameters.Add("field4", propName4); 

      yield return rule; 
     } 

该模型被装饰如下:

[SumValidation("OtherField2...")] 
public int MyField { get; set; } 

当字段呈现时,它就在那里,就data-xxx属性而言,所有的东西都来自服务器端。只是这个特定的客户端验证不会触发。任何人都能看到我失踪的东西?

+0

确定一件事,即使它看起来像一个当然我做那一刻,是在您正在测试的客户端浏览器中启用JavaScript。同时确保jQuery库全部被占据。除此之外,它看起来是正确的。 – Nomad101 2013-04-30 23:24:50

+0

javascript已启用,其他验证在客户端运行。如果不明确,我很抱歉。只是这个人没有做任何事情。我假设所有jQuery库都被占用,因为所有其他验证工作都是以不显眼的方式工作的。 – Chris 2013-04-30 23:31:28

+0

我试着做一个手动$('form')。valid();从页面上的单独位置开始。除了这一个,所有的验证器都会启动,这只是我无法解释的。 – Chris 2013-04-30 23:38:38

想通了。如果有人遇到这个问题。在页面上太晚添加了自定义验证。在将我的自定义验证javascript移动到_Layout.cshtml的头部分后,它开始工作。

所以,如果你的脚本看起来是正确的,检查的好地方。

另一个解决方法是运行$ .validator.unobtrusive.parse('form');重新加载所有验证器。