再会!

我有以下视图模型类用于登录表单:

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/

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top