Asp.net mvc 3 Orchard CMS数据注释-客户端验证
我试图在Orchard模块中进行不引人注目的客户端验证,但遇到了一个问题 在本例中,我只是尝试使用Html.TextBoxFor()对textbox字段强制执行RequiredAttribute 在我看来,Orchard(LocalizedModelValidatorProvider)实现的自定义ModelValidatorProvider似乎阻止了HTML5输入属性的呈现,特别是:Asp.net mvc 3 Orchard CMS数据注释-客户端验证,asp.net-mvc-3,jquery-validate,data-annotations,orchardcms,unobtrusive-validation,Asp.net Mvc 3,Jquery Validate,Data Annotations,Orchardcms,Unobtrusive Validation,我试图在Orchard模块中进行不引人注目的客户端验证,但遇到了一个问题 在本例中,我只是尝试使用Html.TextBoxFor()对textbox字段强制执行RequiredAttribute 在我看来,Orchard(LocalizedModelValidatorProvider)实现的自定义ModelValidatorProvider似乎阻止了HTML5输入属性的呈现,特别是: data-val data-val-required 对于标准DataAnnotations Required
data-val
data-val-required
对于标准DataAnnotations RequiredAttribute。jQuery.validate.unobtrusive需要这些属性才能工作
LocalizedModelValidatorProvider将RequiredAttribute映射到LocalizedRequiredAttribute,因此,在呈现用LocalizedRequiredAttribute修饰的模型属性的文本框输入时,这可能是Orchard ViewEngine中的错误(或未实现的功能)
我怀疑不知何故,这并没有发生:
tagBuilder.MergeAttributes(htmlHelper.GetUnobtrusiveValidationAttributes(name, metadata));
(来自System.Web.Mvc.Html.InputExtensions)
我目前正在运行Orchard 1.3.9
注意:一个棘手的解决办法是删除OrchardStarter模块中LocalizedModelValidatorProvider的注册,并默认返回标准MVC 3提供程序,尽管我希望尽可能不干扰Orchard源代码(更不用说我可能需要本地化消息)我花了三周时间来解决MyPrettyCMS对话框中使用的非结构化验证问题 我还使用LocalizedRequiredAttribute,正如您在这些属性中看到的那样 我不知道Orcad,但我想它会像我一样将用户表单显示为JQuery对话框 有两个困难: 第一:您必须(重新)将对话框字段附加到将用于向服务器发送数据的表单 第二:你必须(重新)解析表单以获得一个有效的非结构化验证 在这里,您将看到一个完整的非结构化验证工作,重点是行$.validator.unobtrusive.parse(form); 这使得分析ajax添加的控件变得不具说服力 在中查找$.fn.jqdialog函数 然后查看方法$.fn.SaveContent-->$(“#divStructurePage”).parent().appendTo(form)
在编辑器模板视图中添加此代码
@model ABC.Models.ModelName
@{
Script.Require("jQuery").AtHead();
Script.Include("jquery.validate.min.js").AtHead();
Script.Include("jquery.validate.unobtrusive.min.js").AtHead(); }
在模块“脚本”文件夹中添加“jquery.validate.min.js,jquery.validate.unobtrusive.min.js”
在Web.cofig文件中添加以下设置
<appSettings>
<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
</appSettings>
这个问题曾经解决过吗。在实现这一点上,我遇到了同样的困难。不是我自己造成的——尽管值得注意的是,这是在版本1.3.9中出现的,已经有将近一年的历史了——它可能在以后的版本中得到了修复。上面描述的解决方法最终对我来说还可以,所以我没有继续研究它-我可能应该提出一个bug…为什么不尝试表单呢,它有内置的动态表单生成功能,它有内置的验证策略,您可以定义。
@model ABC.Models.ModelName
@{
Script.Require("jQuery").AtHead();
Script.Include("jquery.validate.min.js").AtHead();
Script.Include("jquery.validate.unobtrusive.min.js").AtHead(); }
<appSettings>
<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
</appSettings>