我已经创建了一个自定义的ASP.NET MVC ValidationAttribute,并且试图通过将一个字符串传递给基础构造函数来在实例化时为其设置自己的默认错误消息:为自定义ASP.NET MVC验证属性设置默认的ErrorMessage
public class BusinessLogicRegex : ValidationAttribute, IClientValidatable
{
private const string _defaultErrorMessage = "Invalid Password. {0}";
private string _description;
//Other private members
...
public BusinessLogicRegex(string getMember, Type getMemberType, string descriptionMember, Type descriptionMemberType)
: base(_defaultErrorMessage)
{
//Omitted the guts of initializing validation for brevity
...
}
public override string FormatErrorMessage(string name)
{
return String.Format(ErrorMessage, _description);
}
}
但是,当调用FormatErrorMessage时,ErrorMessage为null。为什么base(_defaultErrorMessage)
这个base(_defaultErrorMessage)
没有设置ErrorMessage属性,我应该如何设置它,同时仍然给这个属性的用户覆盖它的能力?
编辑 - 2,清洁例子:
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
public class TestValidator : ValidationAttribute
{
public TestValidator()
: base("Test Error on {0}")
{
}
public override string FormatErrorMessage(string name)
{
return String.Format(ErrorMessage, name);
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
return new ValidationResult(FormatErrorMessage(validationContext.DisplayName));
}
}
在这里,FormatErrorMessage抛出一个空引用异常,因为ErrorMessage
为空。但是ErrorMessageString
==“在{0}上测试错误”。所以我的错误似乎认为调用base("Test Error on {0}")
设置ErrorMessage属性。我根本不明白这一点。在此基础构造如何描述其errorMessage
参数:
错误信息与验证控件
这里关联是什么MSDN说对ErrorMessageString
属性:
错误信息字符串是通过评估ErrorMessage属性或通过评估ErrorMessageResourceType和ErrorMessageResourceName属性获得的。这两种情况是相互排斥的。如果要显示本地化的错误消息,则使用第二种情况。
然而FormatErrorMessage内运行时,ErrorMessage
,ErrorMessageResourceType
和ErrorMessageResourceName
均为空。所以这个描述听起来像ErrorMessageString
也应该为null。这让我对所有这些属性和构造函数之间的使用和交互感到困惑。
它应该是'返回的String.Format(ErrorMessageString,名);' –
不,我娃nt在那里显示_description。我应该把'name'放在默认的消息中。但它是'ErrorMessage',它是null。 – xr280xr
这正是将要做的事!试试吧 –