возврат и использование нескольких моделей в MVC - PullRequest
9 голосов
/ 01 июня 2011

Мне удалось успешно вернуть модель в представление и отобразить результаты строго типизированным способом.

Я никогда не видел пример, чтобы возвращалось несколько моделей. Как мне это сделать?

Полагаю, контроллер будет выглядеть примерно так:

return View(lemondb.Messages.Where(p => p.user == tmp_username).ToList(), lemondb.Lemons.Where(p => p.acidity >= 2).ToList());

Позволяет ли MVC возвращать несколько таких моделей?

И затем в представлении у меня есть эта строка вверху файла:

@model IEnumerable<ElkDogTrader.Models.Message>

И я часто звоню «модели» в представлении.

@foreach (var item in Model)

Если бы было 2 модели, как бы я назвал их отдельно?

Возможно ли это с несколькими моделями, или поэтому люди используют ViewBag и ViewData?

Ответы [ 2 ]

18 голосов
/ 01 июня 2011

Вы можете создать собственную модель, представляющую данные, необходимые для вашего представления.

public class UserView
{
    public User User{get;set;}
    public List<Messages> Messages{get;set;}
}

А потом,

return View(new UserView(){ User = user, Messages = message});

По виду:

Model.User;
Model.Messages;

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

ViewData может быть полезен, если у вас есть одноразовые типы данных в представлении, и вы знаете тип, и все равно будете выполнять приведение в представлении. Некоторые люди предпочитают сохранять фактическое типизированное представление чистым в том смысле, что оно представляет только первичную модель, другие предпочитают использовать проверку типов во время компиляции и поэтому создают собственные модели, необходимые для представления.

1 голос
/ 30 декабря 2013

Я считаю, что ViewModel должен быть подходящим способом. В обычной ViewModel вы можете ссылаться на другие модели или определять все связанные модели домена в самой viewModel.

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