在我的开始页面上,我想显示我在其他页面上的几个不同列表中的第一个项目 - 有点像SO上的“最近”页面显示最近的帖子和最近的评论。在我的情况下,我想列出留言簿中的两个最新帖子,以及下一个即将举行的活动。
为了做到这一点,我如何将多个Model对象传递给我的View?它甚至可能吗?如果没有,应该怎么做?
答案 0 :(得分:11)
tvanfosson解决方案的另一种选择是创建一个强类型视图,以便您获得cvompile-time检查并减少“魔术字符串”。
示例...
假设您有班级:
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>
当然这只是一个演示,我不会逐字使用此代码。