为什么通过View()而不是ViewBag传递数据上下文类?

时间:2011-06-07 14:13:32

标签: asp.net-mvc-3 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并在索引页面中使用它?

2 个答案:

答案 0 :(得分:3)

使用@model IEnumerable<Movie>的优点是提前说清楚 - 这个视图旨在显示(一)IEnumerable<Movie>。它可能会使用一些其他信息(将存储在ViewBag中),但IEnumerable<Movie>是它的意思。这在概念上是原因,与MVC设计模式的概念有很大关系。当然,正如@Tridus所说的技术原因那样。

答案 1 :(得分:2)

严格地说,你可以。但是,如果您将其他内容传递给View,您将无法获得Intellisense的好处或直接的“这是错误的类型”错误。如果您在编译时启用编译视图,也不会捕获错误(尽管默认情况下这是关闭的,因此它不是一个好处)。