2014-04-25 16 views
18

Sto lavorando a un progetto MVC 5, molto nuovo a MVC. Ho notato questa riga nel codice:maiuscolo mvc Modello vs modello minuscolo

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

la direttiva sulla parte superiore della pagina è:

@model Project.Models.ContractViewModel 

classe L'ContractViewModel ha un Contractors oggetto in esso.

public IEnumerable<SelectListItem> Contractors 

Sono solo un po 'confuso sul M maiuscola (Model.Contractors), Il modello fa riferimento sempre l'oggetto passato nel @model? Allora qual è la differenza tra l'uso di Model.Contractors e model.Contractors?

+2

La prima riga utilizza il modello solo come espressione lambda. '@ Html.DropDownListFor (m => m.ContractorId, Model.Contractors)' anche '@ Html.DropDownListFor (myself => myself.ContractorId, Model.Contractors)' sono anche corretti. –

risposta

32

Modello in realtà rappresenta un'istanza della classe che è il tuo modello di e il modello è un alias per l'espressione lambda.

Quando si scrive @Model nella vista che si sta utilizzando l'oggetto di ContractViewModel che è passato da azione di controllo, se non si passa dalla visualizzazione può essere nullo e l'accesso a qualsiasi proprietà del modello può gettare Null Riferimento Eccezione e scrivendo Model.Contractors significa praticamente ContractViewModel.Contractors

e quando si scrive un helper html è necessario scrivere un alias per esso, non è obbligatorio scrivere model è possibile scrivere qualsiasi cosa.

ad esempio:

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

È solo un alias per accedere alle proprietà modello all'interno HTML Helper.

Quando si scrive @model Project.Models.ContractViewModel nella parte superiore di vista che è una cosa diversa, in questo caso stiamo definendo il modello di vista che ci vorranno istanza di Project.Models.ContractViewModel, in realtà la nostra visione è ora fortemente tipizzato ad un'istanza della classe Project.Models.ContractViewModel.