web-dev-qa-db-ja.com

mvc大文字モデルと小文字モデル

私はMVCに非常に新しいMVC5プロジェクトに取り組んでいます。コードのこの行に気づきました:

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

ページ上部のディレクティブは次のとおりです。

@model Project.Models.ContractViewModel

ContractViewModelクラスには、Contractorsオブジェクトが含まれています。

public IEnumerable<SelectListItem> Contractors

大文字のM(Model.Contractors)について少し混乱していますが、Modelは常に@modelで渡されたオブジェクトを参照しますか?次に、Model.Contractorsとmodel.Contractorsの使用の違いは何ですか?

23
Paritosh

Modelは実際にはmodelであるクラスのインスタンスを表し、モデルはラムダ式のエイリアスです。

ビューに@Modelを書き込むと、コントローラーアクションから渡されるContractViewModelのオブジェクトを使用します。ビューから渡されない場合、nullになる可能性があり、Modelの任意のプロパティにアクセスするとスローされる可能性があります- Null Reference ExceptionおよびModel.Contractorsと書くと、基本的にContractViewModel.Contractorsを意味します

また、htmlヘルパーを作成するときは、そのエイリアスを作成する必要があります。modelを作成する必要はなく、何でも作成できます。

例えば:

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

Html Helper内のモデルプロパティにアクセスするための単なるエイリアスです。

ビューの上部に@model Project.Models.ContractViewModelと書くと、これは別のことです。この場合、Project.Models.ContractViewModelのインスタンスを取得するビューのモデルを定義しています。実際、ビューはインスタンスに強く型付けされています。クラスProject.Models.ContractViewModelの。

40
Ehsan Sajjad