art*_*olk 2 asp.net-mvc modelbinders viewmodel asp.net-mvc-2
美好的一天!
我有以下用于登录表单的ViewModel类:
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
}
Run Code Online (Sandbox Code Playgroud)
这个在Global.asax:
DefaultModelBinder.ResourceClassKey = "BinderMessages";
ValidationExtensions.ResourceClassKey = "BinderMessages";
Run Code Online (Sandbox Code Playgroud)
资源文件BinderMessages.resx放在App_GlobalResources里面,它有两个键InvalidPropertyValue(可以工作)PropertyValueRequired,但没有,并给我默认消息.
问题:是否可以修改此消息,或者它与DataAnnotations绑定?
我发现了很多关于此的帖子,但没有解决方案.现在我回到这个:
[Required(ErrorMessageResourceType = typeof(Resources.ValidationErrors), ErrorMessageResourceName = "Required")]
Run Code Online (Sandbox Code Playgroud)
您可以创建一个ValidationAttribute扩展RequiredAttribute和设置值的自定义.就像是:
public class MyRequiredAttribute : RequiredAttribute
{
public MyRequiredAttribute()
{
ErrorMessageResourceType = typeof(Resources.ValidationErrors);
ErrorMessageResourceName = "Required";
}
}
Run Code Online (Sandbox Code Playgroud)
然后使用您的自定义属性装饰您的模型.
默认消息被编译到资源文件中的DataAnnotations程序集中,System.ComponentModel.DataAnnotations.Resources.DataAnnotationsResources.resources并且是RequiredAttribute_ValidationError=The {0} field is required..所以,回答你的问题,是的,该消息是DataAnnotations的一部分.
编辑:PropertyValueRequired用于具有非可空类型的空值的错误.如下所述PropertyValueInvalid,用于类型转换错误.
| 归档时间: |
|
| 查看次数: |
5209 次 |
| 最近记录: |