使用App_GlobalResources目录中的resx文件,我已经能够更改模型验证器的PropertyValueInvalid字符串的默认消息。
但是当需要值时,它无法转换消息(PropertyValueRequired。)
在Global.asax.cs Application_Start()中,我更改了资源类键,如下所示:
DefaultModelBinder.ResourceClassKey = "Messages";
在Messages.resx文件中,我放了两个条目:
感谢。
答案 0 :(得分: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));
希望这有帮助!
Reusable Validation Error Message Resource Strings for DataAnnotations
答案 1 :(得分:9)
此邮件已放入密钥System.ComponentModel.DataAnnotations
下的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; }
}
答案 2 :(得分: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 localisation guide