2009-02-05 26 views
4

在我的開始頁面上,我想顯示我在其他頁面上顯示的幾個不同列表中的第一項 - 有點像SO上的「最近」頁面,顯示最近的帖子和最近的評論。在我的情況下,我想列出留言簿中的兩個最近的帖子,以及下一個即將發生的事件。是否可以將多個模型對象發送到ASP.NET MVC視圖?

爲了做到這一點,我如何將幾個模型對象傳遞給我的視圖?它甚至有可能嗎?如果不是,應該怎麼做?

+0

這篇文章是六年半歲了,我今天就可以得到一個downvote。任何評論 – 2015-11-02 08:20:36

回答

11

替代tvanfosson的解決方案是創建一個強類型視圖,以便獲得cvompile時間檢查和更少的「魔術字符串」。

例...

假設你有類:

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); 
} 

而且,最後...在您的視圖。如果您設置了視圖註冊行來使用它(注意這個部分,這意味着Model屬性將是您的視圖數據參數傳入VIew方法的一個實例),這將允許您使用intellisense訪問傳入的視圖數據控制器。

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

當然這只是一個演示,我不會逐字使用此代碼。

+0

如果你將模型傳遞給partial,你不會得到編譯時檢查,因爲模型參數是object類型的,我不一定喜歡只創建一個新類的想法保存可以作爲ea的數據sily將在現有的容器中。爲什麼不寫一個ViewDataWrapper作爲抽象? – tvanfosson 2009-02-05 03:44:22

相關問題