繁体   English   中英

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

[英]How does asp.net mvc3 instantiate client side validation?

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

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-*根据您用于模型的数据注释生成具有正确data-*属性的输入字段。 这些属性包含所有必要信息,以便生成本机jquery验证规则。 因此,不引人注目的脚本在ASP.NET MVC模型元数据和jquery.validate插件之间形成了jquery.validate 这是完成这项工作的$.validator.unobtrusive.parse函数。 这就是为什么在动态修改DOM时需要手动调用它的原因 - 您正在添加/删除需要转换为jquery验证规则的data-*属性。 不要犹豫,看看它是如何在jquery.validate.unobtrusive.js实现的。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM