Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 Orchard CMS数据注释-客户端验证_Asp.net Mvc 3_Jquery Validate_Data Annotations_Orchardcms_Unobtrusive Validation - Fatal编程技术网

Asp.net mvc 3 Orchard CMS数据注释-客户端验证

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

我试图在Orchard模块中进行不引人注目的客户端验证,但遇到了一个问题

在本例中,我只是尝试使用Html.TextBoxFor()对textbox字段强制执行RequiredAttribute

在我看来,Orchard(LocalizedModelValidatorProvider)实现的自定义ModelValidatorProvider似乎阻止了HTML5输入属性的呈现,特别是:

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>