私は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の使用の違いは何ですか?
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
の。