2011-03-30 87 views
6

ASP.NET MVC的新手(現在使用MVC3與Razor),我很困惑從Controller傳遞一個對象到視圖。具體來說,我正在嘗試使用MVC3和Rob Conery的有趣Massive(http://blog.wekeroad.com/helpy-stuff/and-i-shall-call-it-massive)。我將博客作爲一個簡單的Web應用程序來進行試驗。傳遞大量列表以查看MVC3

HomeController.cs:

public ActionResult Index() 
     { 
      var table = new DynamicModel("mydb", tableName: "Posts"); 
      //grab all the posts 
      var posts = table.All(); 
      ViewData["Posts"] = posts; 

      return View(); 
     } 

這部分的偉大工程。但我該怎麼做?

return View(posts); 

如果我在視圖中引用@posts.PostID,它會出錯並表示它無效。所以我試着創建一個強大的動態模型視圖,但posts仍然不存在。

我知道我可以創建一個ViewModel並輸入視圖並在那裏插入我的數據。這更多的是瞭解Controller/View如何交互。

謝謝!

回答

2

ASP NET MVC模板是解決方案。

首先,使用ViewData特別是現在在MVC 2.0和3.0中不鼓勵,其中有許多更好的方法可以將狀態傳遞給視圖。

強類型視圖是要走的路。但是如果你有一個集合通過?那麼,您仍然可以爲集合(或通用列表)創建強類型視圖,但標準解決方案是使用ASP NET MVC模板(它是ascx文件)而不是集合,並在您的父視圖中調用RenderPartial:

例如:

 <div> 
      <% for (int i = 0; i < Model.Bars.Count; i++) 
       {%> 
      <h3> 
       <a href="#">Bar 
        <%: String.Format("{0:g}", Model.Bars[i].DocumentDate.ToShortDateString())%></a></h3> 
      <div> 
       <%: Html.DisplayFor(m => m.Bars[i].Content)%> 
      </div> 
      <%}%> 
     </div> 

有關於這一主題here一個很好的系列。

+0

公平不夠 - 但如何將'posts'對象傳遞給部分視圖?我創建了一個強類型的視圖,它失敗了...... – 2011-03-30 13:14:02

+0

你不只是說'DisplayFor'或'EditorFor' – Aliostad 2011-03-30 13:20:46

+0

我從Massive創建了一個強類型的DynamicModel對象視圖。我也試圖對付我的MVC.Models.Posts對象。然後我運行'返回查看(帖子);'並試圖在視圖中引用'帖子'。它轟炸了,說'帖子'不存在。 「DisplayFor」和「EditorFor」與此有什麼關係?我完全困惑! – 2011-03-30 13:28:43

10

首先你需要創建一個類。例如:

public class Post : DynamicModel 
{ 
    public Post(): base("db") 
    { 
     PrimaryKeyField = "PostID"; 
    } 

} 

在控制器,你可以有:

public ActionResult Index() 
     { 
      var table = new Post(); 
      var posts = table.All(); 

      return View(posts); 
     } 

所以,你可以創建一個強類型的視圖和視圖設置爲IEnumerable的的模型。該視圖將是這樣的:

@model IEnumerable<dynamic> 

<h2>Index</h2> 
<ul> 
@foreach (var item in Model) 
{ 
    <li>@item.PostID</li> 
} 
</ul> 
+0

感謝GeoChatz!不知道IEnumerable 。 – Leonardo 2011-09-27 05:33:19