我有一个模型类:
public class MyModel() { //properties here... }
我想验证一个MyModel对象列表.所以我创建了这个验证器:
class MyModelListValidator : AbstractValidator<List<MyModel>> { public MyModelListValidator () { RuleFor(x => x) .SetCollectionValidator(new MyModelValidator()) .When(x => x != null); } private class MyModelValidator : AbstractValidator<MyModel> { public MyModelValidator() { //MyModel property validation here... } } }
public class MyModelList() { public List<MyModel> Items { get; set; } }
这会奏效.
但有没有办法在不使用这个额外的类的情况下做到这一点?
解决方法
如果您使用数据批注来执行验证,则可能需要自定义属性:
public class EnsureOneElementAttribute : ValidationAttribute { public override bool IsValid(object value) { var list = value as IList; if (list != null) { return list.Count > 0; } return false; } }
然后:
[EnsureOneElement(ErrorMessage = "At least a person is required")] public List<Person> Persons { get; private set; } or to make it more generic: public class EnsureMinimumElementsAttribute : ValidationAttribute { private readonly int _minelements; public EnsureMinimumElementsAttribute(int minelements) { _minelements = minelements; } public override bool IsValid(object value) { var list = value as IList; if (list != null) { return list.Count >= _minelements; } return false; } }
然后:
[EnsureMinimumElements(1,ErrorMessage = "At least a person is required")] public List<Person> Persons { get; private set; } Personally I use FluentValidation.NET instead of Data Annotations to perform validation because I prefer the imperative validation logic instead of the declarative. I think it is more powerful. So my validation rule would simply look like this: RuleFor(x => x.Persons) .Must(x => x.Count > 0) .WithMessage("At least a person is required");
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。