0

我有一个使用非侵入式验证的 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;
}
4

1 回答 1

0

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

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

默认情况下它将包括 then 除非 Viewbag.ExcludeUnobtrusive == true,这将在我不想要不显眼的脚本引用的页面中设置。

布局文件

@{
var includeUnobtrusive = ViewBag.ExcludeUnObtrusive == null || ViewBag.ExcludeUnObtrusive   == false;
}
....
....
 @if (includeUnobtrusive)
{
    @Scripts.Render("~/bundles/jqueryunobtrusive")
}
于 2013-09-19T15:26:32.433 回答