Можно ли отправить более одного объекта модели в ASP.NET MVC View? - PullRequest
4 голосов
/ 05 февраля 2009

На моей стартовой странице я бы хотел отобразить первые элементы из нескольких разных списков, которые у меня есть, на других страницах - как на «недавней» странице здесь, в SO, отображаются как последние сообщения, так и последние комментарии. В моем случае я хочу перечислить два последних сообщения в гостевой книге и следующее предстоящее событие.

Чтобы сделать это, как я могу передать несколько объектов Model в мой View? Это вообще возможно? Если нет, то как это сделать?

1 Ответ

11 голосов
/ 05 февраля 2009

Альтернативой решению tvanfosson является создание строго типизированного представления, чтобы вы могли проверять время компиляции и меньше "волшебных строк".

Пример ...

Предположим, у вас есть класс:

public class FrontPageViewData
{
    public List<Post> Posts { get; set; }
    public List<Comment> Comments { get; set; }
}

Тогда в вашем контроллере ...

public ActionResult Index()
{
    FrontPageViewData viewData = new FrontPageViewData();
    viewData.Posts = DB.Posts.ToList();
    viewData.Comments = DB.Comments.ToList();
    return View(viewData);
}

И, наконец ... по вашему мнению. Это позволит вам получить доступ к переданным данным представления с помощью intellisense, если вы настроите линию регистрации представления для ее использования (обратите внимание на часть. Это означает, что свойство Model будет экземпляром переданного аргумента viewdata в метод VIew в вашем контроллер.

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<FrontPageViewData>" %>
<asp:Content ID="MainContent" ContentPlaceHolderID="MainContent" runat="server">
<%= Model.Posts.Count().ToString(); %>
<%= Model.Comments.Count().ToString(); %>
</asp:Content>

Конечно, это всего лишь демонстрация, и я бы не стал использовать этот код дословно.

...