5

不知道出了什么问题。语法似乎正确....但它仍然不会在客户端触发。如果我提交表单,我会得到服务器端验证,客户端什么都没有......

这是页面上的代码:

<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 属性而言。只是这个特定的客户端验证不会触发。有人看到我错过了什么吗?

4

1 回答 1

13

弄清楚了。如果有人遇到这种情况。在页面上添加自定义验证为时已晚。在我将自定义验证 javascript 移动到 _Layout.cshtml 的头部后,它开始工作。

因此,如果您的脚本看起来正确,那么是检查的好地方。

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

于 2013-04-30T23:55:02.787 回答