Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is it possible to send more than one model object to an ASP.NET MVC View?

On my start page, I'd like to display the first items from several different lists that I have on other pages - somewhat like the "recent" page here on SO displays both recent posts and recent comments. In my case I want to list the two most recent posts in a guest book, and the next upcoming event.

In order to do this, how can I pass several Model objects to my View? Is it even possible? If not, how should it be done?

like image 606
Tomas Aschan Avatar asked Dec 23 '22 13:12

Tomas Aschan


1 Answers

An alternative to tvanfosson's solution is to create a strongly-typed view so that you get cvompile-time checking and less "magic strings."

Example...

Assume you have the class:

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

Then in your controller...

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

And, finally... in your view. This will allow you to access the passed in view data with intellisense if you setup the view registration line up to use it (notice the part. This means the Model property will be an instance of the passed in viewdata argument into the VIew method in your controller.

<%@ 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>

Of course this is just a demo and I wouldn't use this code verbatim.

like image 160
Chad Moran Avatar answered Jan 23 '23 17:01

Chad Moran