Mvc в верхнем регистре Модель и модель нижнего регистра

Я работаю над проектом MVC 5, очень новым для MVC. Я заметил эту строку в коде:

@Html.DropDownListFor(model => model.ContractorId, Model.Contractors)

директива в верхней части страницы:

@model Project.Models.ContractViewModel

Класс ContractViewModel имеет в нем объект Contractors.

public IEnumerable<SelectListItem> Contractors

Я просто немного запутался в капитале M (Model.Contractors), действительно ли модель всегда ссылается на объект, переданный в @model? Тогда в чем разница между использованием Model.Contractors и model.Contractors?

Ответы

Ответ 1

Модель фактически представляет экземпляр класса, который является вашей моделью, а модель - псевдонимом для выражения лямбда.

Когда вы пишете @Model в своем представлении, вы используете объект ContractViewModel, который передается из действия контроллера, если он не передан из представления, он может быть нулевым и доступ к любому свойству Model может вызывать Исключение Null Reference и запись Model.Contractors в основном означают ContractViewModel.Contractors

и когда вы пишете html-помощник, вам нужно написать псевдоним для него, его необязательно писать model, вы можете что-то написать.

например:

@Html.DropDownListFor(m=> m.ContractorId, Model.Contractors)

Это просто псевдоним для доступа к свойствам модели внутри Html Helper.

Когда вы пишете @model Project.Models.ContractViewModel в верхней части представления, это совсем другое дело, в этом случае мы определяем модель представления, что она примет экземпляр Project.Models.ContractViewModel, на самом деле наше представление теперь строго типизировано для экземпляра class Project.Models.ContractViewModel.