Orchard客户端验证 - 它应该如何工作?

时间:2013-08-02 15:00:19

标签: c# asp.net-mvc orchardcms orchardcms-1.6

我正在尝试在Orchard的管理页面中使用客户端验证。我已经成功地使用this question中讨论的技术使其工作,但在对Orchard源和在线进行一些挖掘后,在我看来,评论这些行

// Register localized data annotations    
ModelValidatorProviders.Providers.Clear();
ModelValidatorProviders.Providers.Add(new LocalizedModelValidatorProvider());

正在破坏一些内置的Orchard功能,允许使用本地化的错误字符串。在这一点上,要么OrchardStarter.cs中的这些行是在验证工作和不为我工作之间的唯一区别。

我希望能提供一些指导,可能来自Orchard团队。如果必须将这些线路用于验证才能工作,为什么它们首先出现在那里?如果他们在那里是有充分理由的,那么我(以及其他人)在尝试使客户端验证工作时做错了什么?如果需要,我很乐意发布代码示例,尽管它是一个非常标准的带有数据注释的ViewModel。感谢。

1 个答案:

答案 0 :(得分:2)

这些行用Orchard自己的实现替换DataAnnotationsModelValidatorProviderDAMVP),这允许以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

所以,目前看来问题标题的正式答案是“它不应该”。

相关问题