Я уверен, что на это был дан ответ раньше, но я потратил последние три часа на поиск приемлемого решения и не смог ничего найти, поэтому я приношу свои извинения за то, что я Конечно, это повторение.Связь с родителями/детьми
У меня есть два объекта домена, игрок и позиция. У игрока есть позиция. Мои объекты домена - это POCOs, привязанные к моей базе данных с NHibernate. У меня есть действие Add, которое принимает Player, поэтому я использую встроенную привязку модели. На мой взгляд у меня есть раскрывающийся список, который позволяет пользователю выбрать позицию для игрока. Значение выпадающего списка - это Id позиции. Все заполняется правильно, за исключением того, что мой объект Position не прошел проверку (ModelState.IsValid), поскольку в момент привязки модели он имеет только идентификатор и ни один из других обязательных атрибутов.
Какое предпочтительное решение для решения этой проблемы с ASP.NET MVC 2?
Решения, которые я пробовал ...
- Позовите позиции из базы данных на основе Id, прежде чем ModelState.IsValid вызывается в Add действия моего контроллера. Я не могу заставить модель снова запустить проверку, поэтому ModelState.IsValid всегда возвращает false.
- Создайте собственный ModelBinder, который наследуется от связующего по умолчанию и извлекает позицию из базы данных после вызова базового связующего. ModelBinder, похоже, делает проверку, поэтому, если я использую что-либо из связующего по умолчанию, меня закрывают. Это означает, что я должен полностью свернуть свое собственное связующее и извлечь все значения из формы ... это кажется действительно неправильным и неэффективным для такого общего использования.
решения, я думаю, мог бы работать, я просто не могу понять, как это сделать ...
- Выключите проверку для класса установки при использовании проигрывателя.
- Запись пользовательского ModelBinder использует связующее значение по умолчанию для большей части привязки свойств, но позволяет мне получить позицию из базы данных, прежде чем проверка по умолчанию будет проверяться.
Итак, как вы все это решаете?
Спасибо,
Dan
P.S. По-моему, наличие позиции в Player только для этого случая не является хорошим решением. Должна быть разрешена более элегантно.
Итак, в основном я должен сделать DTO для всех своих взглядов. Для меня это выглядит довольно неэффективно. У кого-нибудь еще есть решение? – DFX
У меня была такая же мысль, когда я впервые услышал об этом. Но позитивные аспекты тестирования и разделения проблем всегда, кажется, побеждают. Для меня часто быстрее создавать другую модель, чем отлаживать что-то специфичное для домена или создавать пользовательские подборщики моделей. –