使用 $("form").removeData("validator") & $("form").removeData("unobtrusiveValidation"); 背后的原因是什么?内部局部视图

What is the reson behind using $("form").removeData("validator") & $("form").removeData("unobtrusiveValidation"); inside partial view

我正在阅读以下关于在弹出菜单中显示局部视图的示例 link。但我注意到在局部视图中,作者在视图末尾使用了以下代码:-

$("form").removeData("validator");
    $("form").removeData("unobtrusiveValidation");
    $.validator.unobtrusive.parse("form");

那么谁能告诉我添加这段代码的目的是什么?

它从表单中删除了 jQuery 验证。这是对验证数据的引用。

var form = $(formSelector)
  .removeData("validator") /* added by the raw jquery.validate plugin */
  .removeData("unobtrusiveValidation");
    /* added by the jquery unobtrusive plugin */

具体到partial view的实现,可以通过这样的方式实现验证

function ApplyValidation() {
    $("form").removeData("validator");
    $("form").removeData("unobtrusiveValidation");
    $.validator.unobtrusive.parse("form");
}

在非侵入式验证中,一旦验证器被应用于文档,任何其他动态内容验证器(部分视图或 jquery 诱导的 html 控件)将不会被应用。一旦我们重新加载验证器,它会将模型中定义的规则与 JQuery 库提供的规则实现绑定,因此验证将无缝执行。

您拥有的另一个选项(而不是重新加载验证器)是注入新规则,如图所示 here

使用 jquery 数据方法访问表单的 unobtrusiveValidation 数据 ($(form).data('unobtrusiveValidation')) 并访问规则集合并添加新元素属性。

在我的例子中,我使用 $("form").removeData("validator") 因为我对同一个表单有 2 个不同的验证.. 根据按下的按钮调用不同的验证 ;)