c# – 如何直接对List进行验证?
发布时间:2020-12-15 21:01:46 所属栏目:百科 来源:网络整理
导读:我有一个模型类: public class MyModel() { //properties here... } 我想验证一个MyModel对象列表.所以我创建了这个验证器: class MyModelListValidator : AbstractValidatorListMyModel{ public MyModelListValidator () { RuleFor(x = x) .SetCollection
我有一个模型类:
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"); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |