2

我正在使用的应用程序是使用 asp.net MVC 4 的单页应用程序,因此我使用 ajax 来加载部分视图。

jquery.validate.js 和 jquery.validate.unobtrusive.js 已使用捆绑添加到 _layout.cshtml 中。这些没有添加到局部视图中。

通过 ajax 加载部分视图后,元素被附加到某个容器。现在验证不适用于附加的表格,我知道原因。JQuery Unobtrusive 在页面初始加载时解析文档。

正如许多网站说要在 ajax OnSuccess 上添加 $.validator.unobtrusive.parse(selector) 这个,我也这样做了。我得到 $.validator 未定义。

在局部视图中再次添加 jquery.validate.js 和 jquery.validate.unobtrusive.js 后,验证工作。但我不想在我所有的部分观点中添加这个。

JQuery.validate.js 中的 validate 函数在前 5 行中除了验证之外还有这些,

// check if a validator for this form was already created
    var validator = $.data(this[0], 'validator');
    if ( validator ) {
        return validator;
    }

我也想过同样的事情,但我不知道我提出的建议是否好。我想要你的建议。

我的想法:在不显眼地解析文档之后,为什么我不能将 $.validator 存储在某个全局变量中并在部分视图中使用它。下面的示例,

全局变量

var validatorGlobalCache = [];

在 jquery.validate.unobtrusive.js 中,我添加了 validatorGlobalCache['validator'] 来存储 $.validator。

 $(function () {
    $jQval.unobtrusive.parse(document);
    validatorGlobalCache['validator'] = $jQval;
});

OnSuccess 部分视图的 ajax 加载

function ResetValidationRules(selector) {
if (selector != null && selector != undefined) {
    if (validatorGlobalCache != null && validatorGlobalCache != undefined) {
        if (validatorGlobalCache['validator'] != null && validatorGlobalCache['validator'] != undefined) {
            var unobtrusive = validatorGlobalCache['validator'].unobtrusive;
            if (unobtrusive != null && unobtrusive != undefined) {
                selector.removeData('validator').removeData('unobtrusiveValidation');
                unobtrusive.parse(selector);
            }
        }
    }
}

}

我用表单 ID 调用它。这行得通。

这是正确的方法还是您认为可能会出错。

4

0 回答 0