4

这个问题与 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 部分、razor 引擎还是其他部分?

4

2 回答 2

6

a) 一旦页面加载(或加载时),框架如何实例化验证?

它解析 DOM,查找data-*输入字段的属性并添加jquery.validate 规则。jQuery validate 是一个客户端验证插件,它与 ASP.NET MVC 无关,可以与任何服务器端框架甚至纯静态 HTML 一起使用。

b) 框架的哪一部分处理它?是 mvc3 部分、asp.net 部分、razor 引擎还是其他部分?

jquery.validate.unobtrusive.js剧本。ASP.NET MVC 帮助程序,例如简单地使用模型元数据,根据您用于模型的数据注释Html.TextBoxFor生成具有适当属性的输入字段。data-*这些属性包含所有必要的信息,以便生成本机 jquery 验证规则。因此,不显眼的脚本在 ASP.NET MVC 模型元数据和jquery.validate插件之间建立了粘合剂。这$.validator.unobtrusive.parse是完成这项工作的功能。这就是为什么在动态修改 DOM 时需要手动调用它的原因 - 您正在添加/删除data-*需要转换为 jquery 验证规则的属性。不要犹豫,看看它是如何在里面实现的jquery.validate.unobtrusive.js

于 2012-06-12T18:32:37.360 回答
2

它的工作原理正如 Darin Dimitrov 在他的回答中所描述的那样,在客户端,在服务器端,mvc 渲染引擎使用为模型提供的元数据(通常是我们放在模型类的属性上的属性)来决定哪些数据是需要 data-* 属性,以及是否应该渲染它们。
如果您对更精确的答案感兴趣,您可以随时查看mvc 3 的源代码,以准确了解 html 辅助方法何时以及如何读取元数据,最终为您创建 html 字符串。

于 2012-06-12T18:38:40.947 回答