2010-03-17 177 views
6

我目前正试图找出如何本地化由MVC生成的错误消息。让我使用默认模型联编程序作为示例,以便我可以解释问题。默认模型绑定器的MVC本地化

假设我有一个表单,用户输入他们的年龄。用户然后输入“十”的形式,而不是得到预期的错误

“年龄必须介于18和25之间”。

消息

“值 '十' 是无效的年龄。”

被显示。

实体的年龄属性定义如下:

[Range(18, 25, ErrorMessageResourceType = typeof (Errors), 
     ErrorMessageResourceName = "Age", ErrorMessage = "Range_ErrorMessage")]  
    public int Age { get; set; } 

一些挖后,我发现这个错误文本来自System.Web.Mvc.Resources.DefaultModelBinder_ValueInvalidMvcResources.resx文件。

现在,如何创建本文件的本地化版本?

作为一种解决方案,例如,我应该下载MVC来源并添加MvcResources.en_GB.resxMvcResources.fr_FR.resxMvcResources.es_ES.resxMvcResources.de_DE.resx,然后编译我自己的MVC.dll版本?

但我不喜欢这个想法。任何人都知道更好的方法?

+0

有关这方面的一个很好的博客也在这里:http://bradwilson.typepad.com/blog/2010/01/input- validation-vs-model-validation-in-aspnet-mvc.html – 2010-03-22 09:29:05

回答

5

http://forums.asp.net/p/1512140/3608427.aspx,向下滚动到Brad Wilson的回复接近该页面的底部(星期六,一月09 2010,3:20 PM)。 DefaultModelBinder上有静态属性,您可以设置该属性来定位通用错误消息。

一般错误消息是用来代替你的[范围]消息的原因是,[范围]提供了一种验证错误消息,但该特定情况下是一个结合错误。框架绝对没有办法希望将字符串“ten”转换为Int32,所以它甚至不能激发[Range]验证器。这就是该论坛中提到的“PropertyValueInvalid”键所控制的内容。

+0

谢谢,多数民众赞成我正在寻找。 – 2010-03-18 14:35:13

+0

像“PropertyValueInvalid”这样的密钥是否正式记录在某处? – Johnny5 2011-08-31 16:03:14

0
+0

对于验证,我使用Fluent验证。 这里的问题不是验证,我想?问题是MVC,或者在这种情况下,默认的模型联编程序在向ModelState.Error字典添加自己的错误消息时未本地化错误消息。我想要使​​用与默认模型联编程序提供的完全相同的行为,但是我想将这些错误消息本地化为其他语言 – 2010-03-17 14:16:47

3

在MVC3执行以下操作来更改缺省消息:

  1. 添加App_GlobalResources文件夹到你的ASP.NET网站
  2. 添加新资源文件,称它为f.ex.为MyResources。RESX
  3. 添加这些键
    • PropertyValueRequired:需要的值。
    • PropertyValueInvalid:值“{0}”对{1}无效。
  4. 中的global.asax.cs的的Application_Start
  5. 添加一行DefaultModelBinder.ResourceClassKey = "MyResources";