MVC3错误消息全球化

时间:2012-08-28 02:12:17

标签: asp.net-mvc-3 validation globalization global-asax

我真的迷失了为我的MVC3应用程序创建自定义通用验证消息。

我阅读了很多教程,其中最重要的部分提出了以下选项之一:

  1. 创建一个App_GlobalResources文件夹,在里面放置我的自定义资源,我改变了global.asax,将我的资源的字符串名称传递给DefaultModelBinder.ResourceClassKey属性。将资源的构建操作更改为“Embeded Resource”。

  2. 右键单击项目,然后转到属性,单击“资源”选项卡并创建自定义资源。将其访问修饰符设置为“公共”。

  3. 第一个对我不起作用,我的资源中有以下键: DefaultModelBinder_ValueRequired,InvalidPropertyValue,PropertyValueInvalid,PropertyValueRequired 当我试图在模型的必需属性中提交并形成空值时,没有使用它们。 我将此代码放在global.asax Application_Start方法:

    DefaultModelBinder.ResourceClassKey = "My_Resource_Name";
    

    使用 second 方法,我创建了一个与第一个具有相同键的资源。当属性无效或为空时,默认情况下都没有使用它们(我也在global.asax中更改了ResourceClassKey,但没有成功)。但是当我在模型中向数据注释添加一些参数时:

    [Required(ErrorMessageResourceType = typeof(MyResourceFile), ErrorMessageResourceName = "MyCustomKey")]
    

    当该数据注释的属性为空时,使用我用“MyCustomKey”定义的消息!

    但我真的不想手动将其设置为我的所有属性,我想替换默认的错误消息,如:“{0}字段是必需的。”

1 个答案:

答案 0 :(得分:0)

该消息是DataAnnotations的一部分。默认消息将编译到DataAnnotations assembly下的资源文件中的System.ComponentModel.DataAnnotations.Resources.DataAnnotationsResources.resources,并且为RequiredAttribute_ValidationError=The {0} field is required。您可以尝试下载源代码,更改该部分并重建它。

似乎没有一种简单的全球改变方式。您可以尝试this,否则您似乎无法将属性添加到每个字段。或者使用这样的东西:

public class SomeModel
{
    [Required(ErrorMessage = "The article is required")]
    public string Article { get; set; }

    [StringLength(512, ErrorMessage = "Must be less than 512 characters.")]
    public string URL { get; set; }
}