如果我有一个带有索引页面的控制器:
@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
并在索引页面中使用它?
答案 0 :(得分:3)
使用@model IEnumerable<Movie>
的优点是提前说清楚 - 这个视图旨在显示(一)IEnumerable<Movie>
。它可能会使用一些其他信息(将存储在ViewBag
中),但IEnumerable<Movie>
是它的意思。这在概念上是原因,与MVC设计模式的概念有很大关系。当然,正如@Tridus所说的技术原因那样。
答案 1 :(得分:2)
严格地说,你可以。但是,如果您将其他内容传递给View,您将无法获得Intellisense的好处或直接的“这是错误的类型”错误。如果您在编译时启用编译视图,也不会捕获错误(尽管默认情况下这是关闭的,因此它不是一个好处)。