我正在使用的应用程序是使用 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 调用它。这行得通。
这是正确的方法还是您认为可能会出错。