更改默认值"{0}字段是必需的"(最终解决方案?)

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)

bma*_*ini 6

您可以创建一个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,用于类型转换错误.