#c# #asp.net #fluentvalidation
#c# #asp.net #fluentvalidation
Вопрос:
Хотите выполнить проверку самого массива, а также элементов в массиве. Мы не можем обернуть массив в другой класс. Проблема в том, что я, похоже, не могу заставить это проверять по элементам в самом массиве.
public class MyItemArrayValidator : AbstractValidator<MyItem[]>
{
RuleFor(list => list)
.Must(list => list.Length <= 25)
.WithMessage("Too many items in array"));
//Line that does not work below
RuleFor(list => list).SetCollectionValidator(new MyItemValidator());
}
public class MyItemValidator : AbstractValidator<MyItem>
{
... validate MyItem stuff
}
Обновить
Ошибка, возвращаемая при вызове строки…
RuleFor(list => list).SetCollectionValidator(new MyItemValidator());
is «Вложенные валидаторы могут использоваться только с выражениями-членами».
Я понимаю, что ошибка связана с тем, что я работаю с объектом, а не с членом, так что, возможно, такой подход неверен.
Комментарии:
1. Вы имели в виду .Must(список => список. Длина> 25) ? (больше, чем вместо меньше, чем )
2. @FeryalBadili нет, список не может быть больше 25, это правило работает так, как ожидалось. Проблема, однако, заключается в элементах массивов. Я просто хотел продемонстрировать, что я хотел работать как с самим массивом, так и с его элементами.
Ответ №1:
Я нашел это в документации, используя
Правило для каждого
setValidator
public class CustomerValidator : AbstractValidator<Customer> {
public CustomerValidator() {
RuleForEach(x => x.Orders).SetValidator(new OrderValidator());
}
}
public class OrderValidator : AbstractValidator<Order> {
public OrderValidator() {
RuleFor(x => x.Total).GreaterThan(0);
}
}