2014-04-25 46 views
18

Pracuję nad projektem MVC 5, bardzo nowym dla MVC. Zauważyłem tę linię w kodzie:Wielkie litery mvc Model vs małe litery

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

dyrektywa na górze tej strony:

@model Project.Models.ContractViewModel 

klasie ContractViewModel ma Wykonawcy obiektu w nim.

public IEnumerable<SelectListItem> Contractors 

jestem trochę zdezorientowany na kapitale M (Model.Contractors), nie zawsze odnoszą się do modelu obiektu przekazany w @model? Jaka jest różnica między używaniem Model.Contractors i model.Contractors?

+2

Pierwsza linia wykorzystuje model jako wyrażenie lambda. '@ Html.DropDownListFor (m => m.ContractorId, Model.Contractors)' even '@ Html.DropDownListFor (myself => myself.ContractorId, Model.Contractors)' są również poprawne. –

Odpowiedz

32

model faktycznie reprezentuje instancję klasy, która ma swoją modelu i model jest aliasem dla wyrażenia lambda.

Kiedy piszesz @Model w widoku używasz przedmiot ContractViewModel który przekazywany jest z działaniem sterownika, jeżeli nie jest on przekazywany z widokiem na może być null i uzyskiwania dostępu do żadnej własności modelu mogą rzucać wyjątku Null Reference i pisanie Model.Contractors w zasadzie znaczy ContractViewModel.Contractors

i kiedy piszesz pomocnika html trzeba napisać alias dla niego, to nie jest obowiązkowe, aby napisać model można napisać wszystko.

na przykład:

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

To właśnie aliasem do korzystania z właściwości modelu wewnątrz HTML Helper.

Kiedy piszesz @model Project.Models.ContractViewModel na szczycie View to inna sprawa, w tym przypadku mamy do określenia modelu widoku, że będzie podjąć instancję Project.Models.ContractViewModel, faktycznie nasz pogląd jest obecnie silnie wpisane do instancji klasy Project.Models.ContractViewModel.