2011-06-07 38 views
0

如果我有一個控制器,與索引頁:爲什麼通過View()而不是ViewBag傳遞數據上下文類?

@model IEnumerable<MvcMovie.Models.Movie> 

@{ 
    ViewBag.Title = "Index"; 
} 

<h2>Index</h2> 

<table> 
    <tr> 
     <th> 
      Title 
     </th> 
     .... 
    </tr> 

@foreach (var item in Model) { 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.Title) 
     </td> 
     .... 
    </tr> 
} 

</table> 

請告訴我使用@model IEnumerable<Movie>的優勢在哪裏?爲什麼我不能在Controller中定義ViewBag.Movies並在索引頁中使用它?

回答

3

使用@model IEnumerable<Movie>的優勢在於清楚地說出了正確的說法 - 此視圖旨在顯示(an)IEnumerable<Movie>。它可能會使用一些附加信息(將存儲在ViewBag中),但IEnumerable<Movie>是它的意義。這在概念上是原因,這與MVC設計模式的概念有很大關係。正如@Tridus所說,當然有技術上的原因。

2

嚴格地說,你可以。但是,如果您將其他內容傳遞給視圖,則不會獲得Intellisense的好處,也不會獲得簡單的「這是錯誤的類型」錯誤。如果您在編譯時啓用了編譯視圖,您也不會收到錯誤(雖然默認情況下它是關閉的,所以它沒有什麼好處)。

相關問題