更改默认的“需要{0}字段”(终极解决方案?)
-
09-10-2019 - |
题
再会!
我有以下视图模型类用于登录表单:
using System.ComponentModel.DataAnnotations;
...
public class UserLogin : IDataErrorInfo
{
[Required]
[DisplayName("Login")]
public string Login { get; set; }
[Required]
[DisplayName("Password")]
public string Password { get; set; }
[DisplayName("Remember Me")]
public bool RememberMe { get; set; }
#region IDataErrorInfo Members
// This will be a Model-level error
public string Error
{
get
{
if (!WebUser.CanLogin(Login, Password))
{
return Resources.ValidationErrors.InvalidLoginPassword;
}
else
{
return String.Empty;
}
}
}
// All is handled by DataAnnotation attributes, just a stub for interface
public string this[string columnName]
{
get
{
return string.Empty;
}
}
#endregion
}
这进来 Global.asax
:
DefaultModelBinder.ResourceClassKey = "BinderMessages";
ValidationExtensions.ResourceClassKey = "BinderMessages";
资源文件 BinderMessages.resx
放置在app_globalresources中,它有两个键 InvalidPropertyValue
(有效)和 PropertyValueRequired
没有,并给我默认消息。
问题:是否可以修改此消息,或者与数据通号息息相关?
我发现了很多有关此的帖子,但没有解决方案。现在,我只是为此退缩:
[Required(ErrorMessageResourceType = typeof(Resources.ValidationErrors), ErrorMessageResourceName = "Required")]
解决方案
您可以创建一个自定义 ValidationAttribute
延伸 RequiredAttribute
并设置那里的值。就像是:
public class MyRequiredAttribute : RequiredAttribute
{
public MyRequiredAttribute()
{
ErrorMessageResourceType = typeof(Resources.ValidationErrors);
ErrorMessageResourceName = "Required";
}
}
然后使用自定义属性来装饰您的模型。
默认消息被编译到资源文件中的DataNannotations Assembly中 System.ComponentModel.DataAnnotations.Resources.DataAnnotationsResources.resources
并且是 RequiredAttribute_ValidationError=The {0} field is required.
. 。因此,要回答您的问题,是的,该消息是数据通号的一部分。
编辑: PropertyValueRequired
用于在无效类型的空值上进行错误。如下所述 PropertyValueInvalid
用于类型转换错误。
其他提示
我已经使用Singleton课程来提供翻译。您仍然需要按照@bmancini建议的所有属性来得出所有属性。我的方法的好处是,您可以使用多个字符串表(或开关转换源),而无需修改任何其他逻辑。
由于我的博客条目很大,我将提供一个链接:http://blog.gauffin.org/2010/11/simplified-localization-for-dataannotations/