Asp.net

mvc 大寫模型與小寫模型

  • April 25, 2014

我正在開發一個 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中傳遞的對象?那麼使用 Model.Contractors 和 model.Contractors 有什麼區別呢?

Model實際上代表了作為模型的類的一個實例,而model是 lambda 表達式的別名。

當您@Model在視圖中編寫時,您正在使用ContractViewModel從 Controller 操作傳遞的對象,如果它不是從 View 傳遞的,它可以為 null 並且訪問 Model 的任何屬性都可能拋出Null Reference Exception並且寫Model.Contractors你基本上是指ContractViewModel.Contractors

當你寫一個 html 助手時,你需要為它寫一個別名,它不是必須寫的model,你可以寫任何東西。

例如:

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

它只是訪問Html Helper中的模型屬性的別名。

當您@model Project.Models.ContractViewModel在 View 的頂部編寫時,這是另一回事,在這種情況下,我們正在定義它將採用實例的視圖模型Project.Models.ContractViewModel,實際上我們的視圖現在被強類型化為 class 的實例Project.Models.ContractViewModel

引用自:https://stackoverflow.com/questions/23293886