jquery验证插件不能使用不显眼的js引用

时间:2013-09-17 10:31:15

标签: jquery validation knockout.js unobtrusive

我有一个使用不引人注意的验证的MVC4项目,但是对于一个部分我使用的是knockoutjs。

我已经设置了淘汰赛以使用jquery验证插件,但是当我调用$(“form”)。valid()时,它的行为不符合预期。

我在表单中渲染一个表,该表将有几行进行验证。应该在验证中忽略表的第一行,并将其用于向列表中添加新对象。我在第一行给出了每个对象一类“firstRow”

我已经设置了验证器

var validator = $("form").validate({
                ignore: ".firstRow"
            });

但是当我打电话时

$("form").valid()

我注意到所有无效的元素(包括第一行)都添加了“input-validation-error”类。

首先,我希望第一行会被忽略。

其次我不希望应用这个类,因为这是不显眼的验证。我希望将类“错误”应用于jquery验证插件。

当我排除对jquery.validation.unobtrusive.js的引用时,一切正常,但我不能这样做,因为它需要网站的其余部分。

我认为这是从jquery.validation.unobtrusive以某种方式执行的代码,但我想知道如何阻止它执行?

function validationInfo(form) {
    var $form = $(form),
        result = $form.data(data_validation),
        onResetProxy = $.proxy(onReset, form);

    if (!result) {
        result = {
            options: {  // options structure passed to jQuery Validate's validate() method
                errorClass: "input-validation-error",
                errorElement: "span",
                errorPlacement: $.proxy(onError, form),
                invalidHandler: $.proxy(onErrors, form),
                messages: {},
                rules: {},
                success: $.proxy(onSuccess, form)
            },
            attachValidation: function () {
                $form
                    .unbind("reset." + data_validation, onResetProxy)
                    .bind("reset." + data_validation, onResetProxy)
                    .validate(this.options);
            },
            validate: function () {  // a validation function that is called by unobtrusive Ajax
                $form.validate();
                return $form.valid();
            }
        };
        $form.data(data_validation, result);
    }

    return result;
}

1 个答案:

答案 0 :(得分:0)

我最终拆分捆绑包并将jquery.validator文件放在一起,将不显眼的文件放在另一个捆绑包中。

然后在我的布局文件中,我使用Viewbag检查是否应该包含不显眼文件的包。

默认情况下,除非Viewbag.ExcludeUnobtrusive == true,否则它将包含在我不希望不引人注意的脚本引用的页面中设置。

布局文件

@{
var includeUnobtrusive = ViewBag.ExcludeUnObtrusive == null || ViewBag.ExcludeUnObtrusive   == false;
}
....
....
 @if (includeUnobtrusive)
{
    @Scripts.Render("~/bundles/jqueryunobtrusive")
}