После установки сбора валидатор для недвижимости - вы можете забыть о том,, что основная модель и (n - 1)
подмодели существует кроме подмодели быть в настоящее время подтверждено. И нет возможности передать основную модель в качестве параметра в SetCollectionValidator
.
Таким образом, вы должны использовать RuleForEach
метод вместо установки сбора валидатор:
RuleForEach(x => x.SubEntities)
.Must((model, submodel) => IsValidFirst(submodel, model)) // your rules should go here to be applicable to each collection item
.WithMessage("The item with values {0}, {1} has duplicates in collection of {2} items",
(model, submodel) => submodel.Field1,
(model, submodel) => submodel.Field2,
(model, submodel) => model.SubEntities.Count); // for error message building you can access both model and submodel being validated
.Must((model, submodel) => IsValidSecond(submodel, model)) // yet another rule
.WithMessage("...")
.When(model =>
model.Type == SimpleEnum.SpecificType) // can access to main model only, but it is enough for your purposes
Я думаю, что возможность сказать ребенку валидатор о самом деле, что родительская модель может существует, должна быть реализована в будущем, но сейчас существует единственный рабочий подход, упомянутый выше.
UPDATE
Вы можете создавать собственные ModelBinder
, что бы установить Parent
свойство каждого subentity к основному значению объекта, и продолжить использование SetCollectionValidator()
.
Привет, что такое SimpleListValidator? Что-то не хватает в вопросе? – ShloEmi
Я думаю, это не имеет значения. Это какой-то валидатор, который я хочу применить в моем списке, но этот «SimpleListValidator» принимает один параметр в конструкторе, и это так. Теперь я не могу передать лямбда-выражение «x => x.Type», и я не знаю, как создать правильный метод расширения, например SetCollectionValidator. – Lazys
Если я правильно понимаю, SimpleListValidator CTOR получает 1 arg: Тип, если это так: Рассмотрим использование typeof (X): новый SimpleListValidator (typeof (x)). Будет ли это работать? – ShloEmi