#asp.net-mvc-3 #viewbag
#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>
? Почему я не мог просто определить ViewBag.Movies
в контроллере и использовать это на индексной странице?
Ответ №1:
Преимущество использования @model IEnumerable<Movie>
заключается в том, что сразу ясно сказано — это представление предназначено для отображения (an) IEnumerable<Movie>
. Он может использовать некоторую дополнительную информацию (которая будет храниться в ViewBag
), но IEnumerable<Movie>
это то, что он предназначен для отображения. Это концептуально причина, которая имеет много общего с концепцией шаблона проектирования MVC. И, конечно, есть технические причины, как сказал @Tridus.
Ответ №2:
Строго говоря, вы могли бы. Но вы не получите преимуществ Intellisense или простой ошибки «это неправильный тип», если вы передадите что-то еще в представление. Вы также не получите ошибок, если включите компиляцию своих представлений во время компиляции (хотя по умолчанию это отключено, так что пользы от этого меньше).