【问题标题】:MVC Localization of Default Model Binder默认模型Binder的MVC本地化
【发布时间】:2010-03-17 13:48:59
【问题描述】:

我目前正试图弄清楚如何本地化 MVC 生成的错误消息。让我以默认的模型绑定器为例,这样我就可以解释问题了。

假设我有一个表单,用户可以在其中输入年龄。然后用户在表单中输入“十”,但没有得到预期的错误

“年龄必须在 18 至 25 岁之间。”

消息

“值‘十’对年龄无效。”

显示。

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

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

经过一番挖掘,我注意到这个错误文本来自MvcResources.resx 文件中的System.Web.Mvc.Resources.DefaultModelBinder_ValueInvalid

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

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

但我不喜欢这个主意。还有人知道更好的方法吗?

【问题讨论】:

标签: asp.net asp.net-mvc globalization resx


【解决方案1】:

请参阅http://forums.asp.net/p/1512140/3608427.aspx,向下滚动到该页面底部附近的 Brad Wilson 的回复(2010 年 1 月 9 日星期六,下午 3:20)。您可以设置 DefaultModelBinder 上的静态属性来本地化一般错误消息。

使用通用错误消息而不是 [Range] 消息的原因是 [Range] 提供了 validation 错误消息,但这种特殊情况是 binding错误。框架绝对不可能将字符串“十”转换为 Int32,因此它甚至无法触发 [Range] 验证器。这就是该论坛中提到的“PropertyValueInvalid”键所控制的内容。

【讨论】:

  • 谢谢,这正是我要找的。​​span>
  • “PropertyValueInvalid”之类的键是否正式记录在某处?
【解决方案2】:

在 MVC3 中执行以下操作来更改默认消息:

  1. 将 App_GlobalResources 文件夹添加到您的 ASP.NET 站点
  2. 添加一个新的资源文件,命名为 f.ex。我的资源.resx
  3. 添加这些键
    • PropertyValueRequired:需要一个值。
    • PropertyValueInvalid:值“{0}”对 {1} 无效。
  4. 在 global.asax.cs 的 Application_Start 中添加行 DefaultModelBinder.ResourceClassKey = "MyResources";

【讨论】:

    【解决方案3】:

    你试过了吗:IDataErrorInfo属性

    这篇文章会有所帮助

    【讨论】:

    • 对于验证,我使用 Fluent 验证。我认为这里的问题不在于验证?问题是 MVC ,或者在这种情况下,默认模型绑定器在将自己的错误消息添加到 ModelState.Error 字典时没有本地化错误消息。我想使用与默认模型绑定器提供的完全相同的行为,但我想将这些错误消息本地化为其他语言
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2011-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多