部分视图中未定义$ .validator ASP.NET MVC - 需要的建议

时间:2015-08-18 11:52:16

标签: jquery asp.net-mvc validation unobtrusive

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

使用捆绑在_layout.cshtml中添加了jquery.validate.js和jquery.validate.unobtrusive.js。这些未添加到部分视图中。

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

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

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

验证JQuery.validate.js中的函数除验证外还有前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。

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

部分视图的ajax加载的OnSuccess

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调用它。这很有效。

这是正确的方法还是你认为可能出现的任何问题。

0 个答案:

没有答案