我正在使用的应用程序是使用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调用它。这很有效。
这是正确的方法还是你认为可能出现的任何问题。