【问题标题】:Why pass data context class through View() instead of ViewBag?为什么通过 View() 而不是 ViewBag 传递数据上下文类?
【发布时间】:2011-06-07 22:29:06
【问题描述】:

如果我有一个带有索引页面的控制器:

@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&lt;Movie&gt; 有什么好处?为什么我不能在 Controller 中定义 ViewBag.Movies 并在索引页面中使用它?

【问题讨论】:

    标签: asp.net-mvc-3 viewbag


    【解决方案1】:

    使用@model IEnumerable&lt;Movie&gt; 的优点是可以清楚地预先说明 - 此视图旨在显示(一个)IEnumerable&lt;Movie&gt;。它可能会使用一些附加信息(将存储在ViewBag 中),但IEnumerable&lt;Movie&gt; 是它要显示的内容。这就是概念上的原因,这与MVC设计模式的概念有很大关系。当然,正如@Tridus 所说,还有技术原因。

    【讨论】:

      【解决方案2】:

      严格来说,你可以。但是,如果您将其他内容传递给视图,您将不会从 Intellisense 或直接的“这是错误类型”错误中受益。如果您在编译时启用编译视图,您也不会发现错误(尽管默认情况下这是关闭的,所以它没有什么好处)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-10-12
        • 2015-03-24
        • 1970-01-01
        • 1970-01-01
        • 2011-02-04
        • 2013-10-18
        相关资源
        最近更新 更多