【发布时间】:2014-08-04 11:22:17
【问题描述】:
所以我有一个简单的自定义验证属性:
public class MyCustomValidator : CustomValidationAttribute
{
public bool IsLive { get; set; }
public MyCustomValidator()
{
//Service locator stuff
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
return ValidationResult.Success;
}
}
MyCustomValidor 继承了下面的类,因为我的所有自定义验证器都需要访问它。
public abstract class CustomValidationAttribute : ValidationAttribute
{
public Type MessageResource { get; set; }
public string MessagePrefix { get; set; }
}
然后我在我的 viewModel 中调用它,看起来有点像这样:
public class MyViewModel
{
private static bool IsWebLive;
[MyCustomValidator(IsWebLive = IsWebLive, MessageResource = typeof(MyResourceFile), MessagePrefix = "ErrorMessage")]
public string SampleValue { get; set; }
}
在我将私有 IsWebLive 传递到 validator 的地方,我收到一条错误消息 an attribute argument must be a constant expression, typeof expression or array.
我知道我可能做错了。但是我怎么能把这个布尔值传递给验证器,因为我无法访问系统中其他任何地方的设置;
我也不能在MyCustomValidator 中私下设置IsLive/MessageResource/MessagePrefix,因为我的自定义验证器内容是通用的,并且MessagePrefix 和MessageResource 在我的所有自定义验证器中都可以访问。
【问题讨论】:
标签: c# asp.net-mvc validation viewmodel validationattribute