我正在尝试在Orchard的管理页面中使用客户端验证。我已经成功地使用this question中讨论的技术使其工作,但在对Orchard源和在线进行一些挖掘后,在我看来,评论这些行
// Register localized data annotations
ModelValidatorProviders.Providers.Clear();
ModelValidatorProviders.Providers.Add(new LocalizedModelValidatorProvider());
正在破坏一些内置的Orchard功能,允许使用本地化的错误字符串。在这一点上,要么OrchardStarter.cs
中的这些行是在验证工作和不为我工作之间的唯一区别。
我希望能提供一些指导,可能来自Orchard团队。如果必须将这些线路用于验证才能工作,为什么它们首先出现在那里?如果他们在那里是有充分理由的,那么我(以及其他人)在尝试使客户端验证工作时做错了什么?如果需要,我很乐意发布代码示例,尽管它是一个非常标准的带有数据注释的ViewModel。感谢。
答案 0 :(得分:2)
这些行用Orchard自己的实现替换DataAnnotationsModelValidatorProvider
(DAMVP
),这允许以Orchard方式本地化验证消息。它的方式是通过替换例如在将控制权移交给[Required]
之前[LocalizedRequired]
DAMVP
。请注意,DAMVP
可以完成其工作 - 但只有在Orchard“弄乱”了属性之后才会这样做。
问题是DAMVP
使用Attribute
的类型来应用客户端验证属性。现在它不会找到例如RequiredAttribute
,因为它已被LocalizedRequiredAttribute
取代。所以它不知道它应该添加什么 - 如果有的话 - 客户端验证属性。
因此,对这些线条进行评论会让你失去Orchard的本地化。离开他们会让你失去客户验证。
可能工作的一种解决方法(通过Orchard的代码看不够,而且目前无法测试)将使DAMVP
知道Orchard的{ {1}}属性以及如何处理它们。
Localized
有一个静态RegisterAdapter()方法,用于为属性添加新的客户端规则。它采用属性的类型和客户端适配器的类型(负责添加客户端属性的类)来使用。
因此,以下内容可能会起作用:
在OrchardStarter.cs中:
DAMVP
至于官方用语,由于1.3中引入了本地化验证,这似乎没有用,影响被认为很低:http://orchard.codeplex.com/workitem/18269
所以,目前看来问题标题的正式答案是“它不应该”。