Зачем передавать класс контекста данных через View () вместо ViewBag? - PullRequest
0 голосов
/ 07 июня 2011

Если у меня есть контроллер с страницей указателя:

@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 в контроллере и использовать его на странице индекса?

Ответы [ 2 ]

3 голосов
/ 07 июня 2011

Преимущество использования @model IEnumerable<Movie> заключается в ясности высказывания сразу - этот вид предназначен для отображения () IEnumerable<Movie>. Он может использовать некоторую дополнительную информацию (которая будет храниться в ViewBag), но IEnumerable<Movie> - это то, что должно отображаться. Это концептуально причина, которая имеет непосредственное отношение к концепции шаблона проектирования MVC. И, конечно, есть технические причины, как сказал @Tridus.

2 голосов
/ 07 июня 2011

Строго говоря, вы могли бы. Но вы не получите преимущества Intellisense или простой ошибки «это неправильный тип», если передадите что-то еще в View. Вы также не получите ошибок, если включите компиляцию своих представлений во время компиляции (хотя по умолчанию это отключено, поэтому это не приносит пользы).

...