asp.net-mvc-3 – 修改StringLength验证的默认ErrorMessage

StringLength验证的认ErrorMessage比我想要的要长很多:

The field {Name} must be a string with a maximum length of {StringLength}.

我想将其普遍改为:

Maximum length is {StringLength}.

我想避免冗余地指定我声明的每个字符串的ErrorMessage:

[StringLength(20,ErrorMessage="Maximum length is 20")]
    public string OfficePhone { get; set; }
    [StringLength(20,ErrorMessage="Maximum length is 20")]
    public string CellPhone { get; set; }

我很确定我记得有一种简单的方式来普遍改变ErrorMessage,但是不能回想起来。

编辑:

为了澄清,我试图普遍地更改认的ErrorMessage,以便我可以输入:

[StringLength(20)]
    public string OfficePhone { get; set; }

并有错误信息说:

Maximum length is 20.

解决方法

您可以在许多属性上指定StringLength属性,如下所示
[StringLength(20,ErrorMessageResourceName = "StringLengthMessage",ErrorMessageResourceType = typeof(Resource))]
public string OfficePhone { get; set; }
[StringLength(20,ErrorMessageResourceType = typeof(Resource))]
public string CellPhone { get; set; }

并在您的资源文件添加字符串资源(名为StringLengthMessage)

"Maximum length is {1}"

消息定义一次,并有一个变量占位符,如果你改变想法的长度来测试。

您可以指定以下内容

> {0} – 名称
> {1} – 最大长度
> {2} – 最小长度

更新

为了进一步减少重复,您可以对StringLengthAttribute进行子类化:

public class MyStringLengthAttribute : StringLengthAttribute
{
    public MyStringLengthAttribute() : this(20)
    {
    }

    public MyStringLengthAttribute(int maximumLength) : base(maximumLength)
    {
        base.ErrorMessageResourceName = "StringLengthMessage";
        base.ErrorMessageResourceType = typeof (Resource);
    }
}

或者,如果要添加其他参数,您可以覆盖FormatErrorMessage。现在的属性如下:

[MyStringLength]
public string OfficePhone { get; set; }
[MyStringLength]
public string CellPhone { get; set; }

相关文章

这篇文章主要讲解了“WPF如何实现带筛选功能的DataGrid”,文...
本篇内容介绍了“基于WPF如何实现3D画廊动画效果”的有关知识...
Some samples are below for ASP.Net web form controls:(fr...
问题描述: 对于未定义为 System.String 的列,唯一有效的值...
最近用到了CalendarExtender,结果不知道为什么发生了错位,...
ASP.NET 2.0 page lifecyle ASP.NET 2.0 event sequence cha...