ModelState.IsValid не проверяет свойства коллекции и всегда возвращает true - PullRequest
1 голос
/ 08 июня 2019

У меня есть эти классы

    public class Shape
    {
        public Shape()
        {
            ShapeDetails = new List<ShapeDetail>();
        }

        public int ID { get; set; }
        public string Name { get; set; }
        public List<ShapeDetail> ShapeDetails { get; set; }
    }

    public class ShapeValidator : AbstractValidator<Shape>
    {
        public ShapeValidator()
        {
            RuleFor(x => x.Name).NotEmpty().Length(1, 225);
        }
    }

public class ShapeDetail
{
    public int ID { get; set; }
    public decimal RangeFrom { get; set; }
    public decimal RangeTo { get; set; }
    public decimal Price { get; set; }
    public int ShapeID { get; set; }
    [NonPersistent]
    public Shape Shape { get; set; }
}

public class ShapeDetailValidator : AbstractValidator<ShapeDetail>
{
    public ShapeDetailValidator()
    {
        RuleFor(x => x.RangeFrom).NotEmpty().LessThan(100);
        RuleFor(x => x.RangeTo).NotEmpty().LessThan(100);
        RuleFor(x => x.Price).NotEmpty().LessThan(9999999999);
    }
}

Когда я вызываю ModelState.IsValid на Shape, он всегда возвращает true, кажется, что он не проверяет ShapeDetail, как мне включить ShapeDetails в проверку?

Спасибо

1 Ответ

1 голос
/ 08 июня 2019

нашел ответ, нужно добавить RuleForEach в ShapeValidator

public class ShapeValidator : AbstractValidator<Shape>
{
    public ShapeValidator()
    {
        RuleFor(x => x.Name).NotEmpty().Length(1, 225);
        RuleForEach(x => x.ShapeDetails).SetValidator(new ShapeDetailValidator());
    }
}

источник: https://fluentvalidation.net/start#collections

...