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; }