asp.net-mvc – Asp.Net MVC:一些非本地化的默认错误消息?

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – Asp.Net MVC:一些非本地化的默认错误消息?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个完全本地化的网站,主要是法语/英语/德语.

现在,一切都进行得很好,但是我确实注意到asp.net MVC有一些错误信息的问题.

我的模型中有一个属性

[required]
[LocalizedDisplayName("PublicationDate",NameResourceType = typeof(LocalizationResources.Views.Composer.BaseInfoForm))]
public DateTime PublicationDate { get; set; }

LocalizedDisplayname是DisplayNameAttribute的扩展名,它在Resx文件中进行正确的翻译

线程CurrentCulture和CurrentCultureUI都在fr-FR中,所以消息应该以法语显示(就像我的[必需]属性一样),自动显示“Le champ Publication est requis”.

但是在DateTime的情况下,如果输入的日期不是日期,则验证器只会返回一个“asdfasdf”对于“出版”无效.
所以:

>为什么MVC有时会以法语返回我的错误消息,有时以英文返回,以同样的形式(我确切地说,这是默认的错误消息)
>如何通过表示“La valeur {0} n’est pas une date valide pour le champ {1}”这样的文本来代替这个消息.

非常感谢你

解决方法

我认为这两个问题回答你:
  • Why MVC returns me sometimes error message in french,and sometimes in english,in the same form(and I precise,it’s the default error message)

一个显着的区别是[必需]属性执行显式的客户端验证,而当您的字段不包含有效的DateTime时,您将通过缺省模型绑定器的失败获得服务器端验证,以从发布的方式创建一个DateTime对象表单数据.这是一个完全不同的机制,我猜这是不同的结果.当然,如果结果是一致的,那将是很好的.

  • How to replace this message genericly,by indicating a text like “La valeur {0} n’est pas une date valide pour le champ {1}”

有两种方式:

>告诉默认模型binder使用DefaultModelBinder.ResourceClassKey属性错误消息使用什么资源字符串.有关如何实现这一点的说明(对于MVC 2,但在MVC 3中没有改变),请参阅this related question的答案
>一个更好的方法(我认为)是做客户端验证.这允许您从本地化的资源提供您希望的错误消息字符串.通过添加下面的DataType属性,假设您创建了一个名为MyLocalizedResources的资源类,其字符串的“DateTimeFormatValidationMessage”用法语翻译为“La valeur {0} n’est pas une date valide pour le champ {1}”:

[required]
[DataType(DataType.Date,ErrorMessageResourceType = typeof(MyLocalizedResources),ErrorMessageResourceName = "DateTimeFormatValidationMessage")]
[LocalizedDisplayName("PublicationDate",NameResourceType = typeof(LocalizationResources.Views.Composer.BaseInfoForm))]
public DateTime PublicationDate { get; set; }

猜你在找的asp.Net相关文章