我有一个验证课:
public sealed class ValidationSet : ValidationAttribute
{
private List<string> _set = new List<string>();
public ValidationSet(params string[] setOfValues)
{
_set = setOfValues.ToList();
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (!(_set.Select(s => s.ToLower()).Contains(value.ToString().ToLower())))
{
throw new Exception("not in the set");
}
return ValidationResult.Success;
}
}
以下是我如何使用它:
public class Car
{
[ValidationSet("honda", "gm")]
public string CarMake{ get; set; }
}
当我通过以下方式实例化Car类时:
...
Car c = new Car();
c.CarMake = "ford";
...
什么都不会发生,如果我打印c.CarMake,它显示福特 - 验证没有发生。
我只是想知道我在这里想念什么。
谢谢!
答案 0 :(得分:3)
只是实例化类并分配字段不会调用IsValid,您需要在检查Car的框架中使用该类,看到它在CarMake上有ValidationAttribute并且将调用IsValid。
在这个例子中,asp:DynamicValidator正在开展工作:
答案 1 :(得分:1)
我会研究FluentValidation。您可以为Car创建验证器类。
public class CarValidator : AbstractValidator<Car>
{
public CarValidator() {
RuleFor(m => m.CarMake).Equal("gm").Equal("honda");
}
}
用法:
var car = new Car { CarMake = "honda" };
var validator = new CarValidator();
if (validator.Validate(car).IsValid)
// car is valid