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, хотя.