Зачем передавать класс контекста данных через View () вместо ViewBag?

#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 или простой ошибки «это неправильный тип», если вы передадите что-то еще в представление. Вы также не получите ошибок, если включите компиляцию своих представлений во время компиляции (хотя по умолчанию это отключено, так что пользы от этого меньше).