ASP.NET MVC - несколько моделей в форме и связыватели моделей

У меня есть форма, которая должна заполнить 2 модели. Обычно я использую ModelBinderAttribute для форм после действия, т.е.

    [Authorize]
    [AcceptVerbs("POST")]
    public ActionResult Add([GigBinderAttribute]Gig gig, FormCollection formCollection)
    {
       ///Do stuff
    }

В моей форме поля названы так же, как свойства моделей...

Однако в этом случае у меня есть 2 разные модели, которые нужно заполнить.

Как мне это сделать? Есть идеи? Является ли это возможным?

3 ответа

Решение

На самом деле... лучший способ сделать это:

public ActionResult Add([GigBinderAttribute]Gig gig, [FileModelBinderAttribute]File file) {

}

Вы МОЖЕТЕ использовать несколько атрибутов!

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

class AddModel
{
     public Gig GigModel {get; set;}
     public OtherType OtherModel {get; set;}
}

... и связать это.

Для этого можно использовать метод UpdateModel или TryUpdateModel. Вы можете пройти через модель, модель, которую хотите связать, префикс элементов, которые вы хотите связать с этой моделью, и форму. Например, если ваша модель Item имеет переменные формы "Item.Value", то ваш метод модели обновления будет выглядеть так:

UpdateMode(modelObject, stringPrefix, formCollection);

Если вы используете платформу сущностей, стоит отметить, что метод UpdateModel не всегда работает при некоторых условиях. Это работает особенно хорошо с POCO, хотя.

Другие вопросы по тегам