asp.net mvc3如何实例化客户端验证?

Tra*_*s J 4 validation jquery asp.net-mvc-3

这个问题与asp.net mvc3框架最为密切相关.它最初是"如何使用带有asp.net mvc3的jQuery确保动态附加输入字段的活动验证?" 然而,经过一些搜索,测试和咖啡,我发现了这个:

function reValidate(formId) {
 $("#" + formId).removeData("validator");
 $("#" + formId).removeData("unobtrusiveValidation");
 $.validator.unobtrusive.parse("#" + formId);
}
Run Code Online (Sandbox Code Playgroud)

这很好用.但是,我对框架实际使用的机制更加好奇.我有一个完全基于脚本生成的页面.视图中唯一的东西是a <div>,一个<script>用于加载我的库的标签,另一个<script>用于填充<div>.渲染完全动态的页面后,验证完美无瑕.但是,如果在加载页面后使用页面加载时使用的相同进程包含一些新内容,则验证会中断.当然,只需打电话reValidate().

但是 -

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

b)框架的哪个部分处理它?它是mvc3部分,asp.net部分,剃刀引擎还是其他部分?

Dar*_*rov 6

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

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

b)框架的哪个部分处理它?它是mvc3部分,asp.net部分,剃刀引擎还是其他部分?

这是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.