【发布时间】:2012-02-28 23:36:58
【问题描述】:
我正在尝试在 Orchard 模块中进行不显眼的客户端验证,但我遇到了问题。
在此示例中,我只是尝试使用 Html.TextBoxFor() 在文本框字段上强制执行 RequiredAttribute。
在我看来,Orchard 实现的自定义 ModelValidatorProvider (LocalizedModelValidatorProvider) 阻止了 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。
注意: 一个 hacky 解决方法是删除 OrchardStarter 模块中 LocalizedModelValidatorProvider 的注册,并默认返回标准 MVC 3 提供程序,尽管我不想打扰 Orchard 源,如果在一切可能(更不用说我可能在某些时候需要本地化消息)......
【问题讨论】:
-
这个问题解决了吗。我在实现这一目标时遇到了同样的问题。
-
不是我的 - 虽然值得注意的是,这是在将近一年前的版本 1.3.9 中 - 它可能已在以后的版本中得到修复。上面描述的解决方法最终对我来说没问题,所以没有追求它 - 我可能应该提出一个错误......
-
为什么不试试 offorms,它具有内置的动态表单生成功能,它具有您可以定义的内置验证策略。 gallery.orchardproject.net/List/Modules/Orchard.Module.oforms
标签: asp.net-mvc-3 jquery-validate data-annotations orchardcms unobtrusive-validation