ASP.NET MVC4 不显眼的验证本地化
问题:
我在使用不显眼的 jquery 验证将默认消息本地化为隐式 [Required] 属性时遇到问题。我不想将 [Required] 放在我的模型和关联的资源文件中的每个 int (和其他不可空类型)上。我想知道是否有人测试过 ASP.NET MVC4 Dev Preview 并注意到同样的问题?当我查看 mvc 代码时,它显然应该可以工作。
尝试的解决方案:
在global.asax中添加:
DefaultModelBinder.ResourceClassKey = "ErrorMessages";
在具有PropertyValueInvalid和PropertyValueRequired的全局资源中添加名为“ErrorMessages.resx”和“ErrorMessages.fr.resx”的资源文件。
有趣的信息:
我注意到的一件好事是他们修复了“字段必须是数字”或“字段必须是日期”的硬编码在内部密封类中。
ClientDataTypeModelValidatorProvider.ResourceClassKey = "ErrorMessages";
如果您在全局资源文件夹和 FieldMustBeNumeric/FieldMustBeDate 中有名为“ErrorMessages.resx”和“ErrorMessages.fr.resx”的资源文件,则可以使用
Problem:
I have issues getting the default messages to be localized for implicit [Required] attributes using unobtrusive jquery validation. I do not want to put [Required] on every int (and other non-nullable types) in my model and the ressource file associated. I am wondering if anyone has tested the ASP.NET MVC4 Dev Preview and noticed the same issue? When I look at the mvc code it clearly seems like it should work.
Attempted solution:
Added in the global.asax:
DefaultModelBinder.ResourceClassKey = "ErrorMessages";
Have a resource file called "ErrorMessages.resx" and "ErrorMessages.fr.resx" in the global resources with PropertyValueInvalid and PropertyValueRequired.
Interesting information:
A good thing I have noticed is that they fixed the "Field must be a number" or "Field must be a date" from being hard coded in an internal sealed class.
ClientDataTypeModelValidatorProvider.ResourceClassKey = "ErrorMessages";
Does work if you have a resource file called "ErrorMessages.resx" and "ErrorMessages.fr.resx" in the global ressources folder and FieldMustBeNumeric/FieldMustBeDate
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我知道这已经很旧了,但是要将本地化消息放入元数据中,需要子类化 DataAnnotationsModelValidator 并重写 GetClientValidationRules 和 Validate 以提供您自己的消息。
您可以使用 DataAnnotationsModelValidatorProvider.RegisterAdapterFactory 注册适配器。
我构建了一个包装工厂构建器来创建工厂委托。 out 参数就在这里,因为我在循环中使用它,因为我通过反射发现程序集中的所有适配器,因此我需要获取每个适配器的属性类型才能调用 RegisterAdpaterFactory。我本可以内联注册,但在此之后我使用适配器/属性信息执行其他操作
,这也适用于 MVC3,我认为 MVC2 也适用。
I know this is old, but to get localised messages into the metadata is to subclass DataAnnotationsModelValidator and override GetClientValidationRules and Validate to supply your own messages.
You register the adapter using DataAnnotationsModelValidatorProvider.RegisterAdapterFactory.
I built a wrapper factory builder to create the factory delegate. The out parameter is here as I use this inside a loop as I discover all adapters in the assembly via reflection, so I need to get the attribute type for each adapter in order to call RegisterAdpaterFactory. I could have inlined the registration but I do other stuff after this using the adapter/attribute information
This also works in MVC3, and i think MVC2 as well.