这个问题与asp.net mvc3框架最为密切相关。它最初是“如何使用带有asp.net mvc3的jQuery确保动态附加输入字段的活动验证?”然而,在经过一些搜索,测试和咖啡之后,我发现了这个:
function reValidate(formId) {
$("#" + formId).removeData("validator");
$("#" + formId).removeData("unobtrusiveValidation");
$.validator.unobtrusive.parse("#" + formId);
}
这很好用。但是,我对框架实际使用的机制更加好奇。我有一个完全基于脚本生成的页面。视图中唯一的内容是<div>
,<script>
标记用于加载我的库,另一个<script>
用于填充<div>
。渲染完全动态的页面后,验证完美无瑕。但是,如果在加载页面后使用页面加载时使用的相同进程包含一些新内容,则验证会中断。当然,只需致电reValidate()
。
但是 -
a)一旦页面加载(或加载),框架如何实例化验证?
b)框架的哪个部分处理它?它是mvc3部分,asp.net部分,剃刀引擎还是其他部分?
答案 0 :(得分:6)
a)一旦页面有框架,框架如何实例化验证 加载(或加载时)?
它解析DOM,在输入字段中查找data-*
属性并添加jquery.validate rules。 jQuery validate是一个客户端验证插件,它与ASP.NET MVC无关,可以与任何服务器端框架一起使用,甚至可以与纯静态HTML一起使用。
b)框架的哪个部分处理它?它是mvc3的一部分吗? asp.net部分,剃刀引擎,还是其他部分?
这是jquery.validate.unobtrusive.js
脚本。 ASP.NET Html.TextBoxFor
之类的ASP.NET MVC帮助程序只是使用模型元数据根据您用于模型的数据注释生成具有正确data-*
属性的输入字段。这些属性包含所有必要信息,以便生成本机jquery验证规则。因此,不显眼的脚本在ASP.NET MVC模型元数据和jquery.validate
插件之间形成了粘合剂。这是完成这项工作的$.validator.unobtrusive.parse
函数。这就是为什么在动态修改DOM时需要手动调用它的原因 - 您正在添加/删除需要转换为jquery验证规则的data-*
属性。不要犹豫,看看它是如何在jquery.validate.unobtrusive.js
内实现的。
答案 1 :(得分:2)
它的工作原理如Darin Dimitrov在他的回答中所述,在客户端,在服务器端,mvc渲染引擎使用为模型提供的元数据(通常是我们对模型类的属性赋予的属性)来决定data- *属性需要哪些数据,以及是否应该呈现它们。
如果您对更精确的答案感兴趣,可以随时查看source code of mvc 3,以确切了解html帮助器方法何时以及如何读取元数据,最终为您创建html字符串。