13

使用 App_GlobalResources 目录中的 resx 文件,我已经能够更改模型验证器的 PropertyValueInvalid 字符串的默认消息。

但是当需要值时翻译消息不起作用(PropertyValueRequired。)

在 Global.asax.cs Application_Start() 我更改了资源类键,如下所示:

DefaultModelBinder.ResourceClassKey = "Messages";

在 Messages.resx 文件中,我输入了两个条目:

  • "PropertyValueInvalid" => "O valor '{0}' é inválido para o campo {1}。"
  • "PropertyValueRequired" = > "É necessário digitar o {0}。"

谢谢。

4

4 回答 4

17

RequiredAttribute 未使用 DefaultModelBinder.GetValueRequiredResource。创建自定义 DataAnnotationsModelValidator 类。

public class MyRequiredAttributeAdapter : RequiredAttributeAdapter
{
  public MyRequiredAttributeAdapter(ModelMetadata metadata, 
                                    ControllerContext context, 
                                    RequiredAttribute attribute) 
         : base(metadata, context, attribute)
  {
    attribute.ErrorMessageResourceType = typeof (Messages);
    attribute.ErrorMessageResourceName = "PropertyValueRequired";
  }
}

并在 Global.asax 中注册适配器。

DataAnnotationsModelValidatorProvider.RegisterAdapter(
    typeof(RequiredAttribute), 
    typeof(MyRequiredAttributeAdapter));

希望这有帮助!

DataAnnotations 的可重用验证错误消息资源字符串

于 2011-03-06T00:53:44.700 回答
9

System.ComponentModel.DataAnnotations此消息在 key 下被烘焙到程序集中RequiredAttribute_ValidationError。您可以编写自定义验证属性:

public class MyRequiredAttribute : RequiredAttribute
{
    public MyRequiredAttribute()
    {
        ErrorMessageResourceType = typeof(Messages);
        ErrorMessageResourceName = "Required";
    }
}

然后在你的Messages.resx文件中定义Required字符串:

Required => É necessário digitar o {0}.

最后用这个自定义属性装饰你的视图模型属性:

public class MyViewModel
{
    [MyRequired]
    public int Foo { get; set; }
}
于 2011-03-05T15:39:11.120 回答
0

怎么样

[Required (ErrorMessageResourceName="Required",ErrorMessageResourceType=typeof(Messages)]

public string Foo { get; set; }

Required => É necessário digitar o {0}.

或者

Required => {0} field is required.

请参阅下面的链接以获取完整的 asp.net mvc 本地化指南 asp.net mvc 本地化指南

于 2011-03-05T16:36:37.290 回答
0

像这样添加

[Required(ErrorMessage = "Your Error Message, here..!")]
于 2015-08-25T08:48:49.363 回答