我目前正在尝试找出如何本地化 MVC 生成的错误消息。让我使用默认的模型绑定器作为示例,以便我可以解释问题。
假设我有一个表单,用户可以在其中输入他们的年龄。然后用户在表单中输入“十”,但没有得到预期的错误
“年龄必须在 18 岁至 25 岁之间。”
消息
“值‘十’对于年龄无效。”
被展示。
实体的年龄属性定义如下:
[Range(18, 25, ErrorMessageResourceType = typeof (Errors),
ErrorMessageResourceName = "Age", ErrorMessage = "Range_ErrorMessage")]
public int Age { get; set; }
经过一番挖掘,我注意到这个错误文本来自System.Web.Mvc.Resources.DefaultModelBinder_ValueInvalid
in the MvcResources.resx
file.
现在,如何创建该文件的本地化版本?
作为一个解决方案,例如,我应该下载 MVC 源并添加MvcResources.en_GB.resx
, MvcResources.fr_FR.resx
, MvcResources.es_ES.resx
and MvcResources.de_DE.resx
,然后编译我自己的版本MVC.dll
?
但我不喜欢这个主意。还有人知道更好的方法吗?
See http://forums.asp.net/p/1512140/3608427.aspx,向下滚动到该页面底部附近 Brad Wilson 的回复(2010 年 1 月 9 日星期六下午 3:20)。 DefaultModelBinder 上有一些静态属性,您可以设置它们来本地化通用错误消息。
使用通用错误消息而不是 [Range] 消息的原因是 [Range] 提供了验证错误消息,但这种特殊情况是binding错误。框架绝对不可能将字符串“ten”转换为 Int32,因此它甚至无法触发 [Range] 验证器。这就是该论坛中提到的“PropertyValueInvalid”键所控制的内容。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)