Как использовать ModelState.IsValid со сложными объектами? - PullRequest
0 голосов
/ 19 июля 2010

Я использую NHibernate, у меня есть класс Campaign, и у него есть класс Client в качестве одного из его членов, и я пытаюсь использовать ModelState.IsValid в моем методе [HttpPost] public Create (CreateCampaignViewModel vm).

Поскольку моя ViewModel содержит объект, Campaign ModelStats.IsValid всегда ложно, поскольку я передаю Client.Id из формы вместо всего Client объекта.

Есть ли способчтобы он загрузил элемент Client, прежде чем он запустит проверочный код, который устанавливает ModelState.IsValid?Или есть способ обновить состояние ModelState после того, как я «вручную» извлек клиентский объект на основе ClientId и связал его с Campaign?

Ответы [ 4 ]

1 голос
/ 19 июля 2010

Возможно, вы захотите добавить атрибут к параметру вашего метода действия, чтобы отключить привязку идентификатора:

[HttpPost]
public Create([Bind(Ignore="ClientId")]CreateCampaignViewModel vm)
1 голос
/ 19 июля 2010

Стивен Сандерсон имеет пост в блоге только об этом.Он удаляет любые элементы, которые не имеют входящих значений, из коллекции ошибок.

http://blog.stevensanderson.com/2010/02/19/partial-validation-in-aspnet-mvc-2/

0 голосов
/ 19 июля 2010

Я считаю, что в SharpArch есть связыватель моделей, который может загружать объекты NH.Но мне эта идея не очень нравится ... вместо этого я бы использовал отдельную PostModel для хранения опубликованных значений формы.Если вы повторно используете ViewModel для хранения данных публикации, у вас обычно будет много полей, которые не имеют смысла публиковать (например, объект «Клиент» в вашем примере) или отображать поля только для чтения.

class CampaignPostModel{
    ...
    public int ClientId { get; set; }
}

Все, что вам нужно сделать, это сопоставить имена свойств с именами входных данных формы и добавить это в качестве параметра в методе после действия.

0 голосов
/ 19 июля 2010

Попробуйте использовать одну из перегрузок в методе контроллера UpdateModel. Затем вызовите ModelState.IsValid.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...