Asp.net mvc 4 MVC4自定义不引人注目的验证器isn';行不通
不知道怎么了。语法似乎正确。。。。但它仍然不能在客户端启动。如果我提交表单,我会得到服务器端验证,客户端什么都没有 以下是页面上的代码:Asp.net mvc 4 MVC4自定义不引人注目的验证器isn';行不通,asp.net-mvc-4,unobtrusive-validation,Asp.net Mvc 4,Unobtrusive Validation,不知道怎么了。语法似乎正确。。。。但它仍然不能在客户端启动。如果我提交表单,我会得到服务器端验证,客户端什么都没有 以下是页面上的代码: <script src="@Url.Content("~/Scripts/jquery.validate.min.js")"></script> <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")"></script>
<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>
当字段呈现时,它就在那里,所有来自服务器端的数据属性。仅此特定的客户端验证不会启动。有人看到我遗漏了什么吗?明白了。如果有人碰到这个。在页面上添加自定义验证太晚。在我将自定义验证javascript移到_Layout.cshtml的head部分后,它开始工作 因此,如果您的脚本看起来正确,那么是检查的好地方
另一个解决方法是运行$.validator.unobtrusive.parse('form');这将重新加载所有验证器。好的,需要确保的是,在您正在测试的客户端浏览器中启用了javascript,尽管这看起来像是一个哑巴,当然我当时也做了。还要确保jQuery库都被考虑在内。除此之外,它看起来是正确的。javascript已启用,其他验证在客户端工作。如果不清楚的话,我道歉。只是这个没什么用。我假设所有的jQuery库都已记账,因为所有其他验证都以不引人注目的方式工作;从页面上的一个单独的位置。除了这个,所有的验证器都会启动,这是我无法解释的。非常感谢。你为我节省了很多时间。
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; }