2017-04-02 163 views
0
設置私有財產

我按照這個教程在ASP.NET MVC創建下拉菜單:http://odetocode.com/blogs/scott/archive/2013/03/11/dropdownlistfor-with-asp-net-mvc.aspx在視圖模型

的代碼示例給出的是:

public class IceCreamFlavor 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

public class ViewModel 
{ 
    private readonly List<IceCreamFlavor> _flavors; 

    [Display(Name = "Favorite Flavor")] 
    public int SelectedFlavorId { get; set; } 

    public IEnumerable<SelectListItem> FlavorItems 
    { 
     get { return new SelectList(_flavors, "Id", "Name");} 
    } 
} 

什麼是設置_flavors的正確方法?它是private readonly。這有什麼理由嗎? MVC的一些功能來填充它?

我明顯可以通過構造函數來公開或私有,但我想知道爲什麼Scott Allen會這樣設置它。它有一些邏輯嗎?

+1

如圖所示,不,你不能以任何方式設置它。我會認爲有些東西被遺漏了,因爲我看到的唯一方法就是通過一個構造函數來設置,而這個構造函數在這裏沒有。 –

+0

你可以設置readonly與一個構造? – Guerrilla

+0

這將是您唯一可以設置的地方。 https://msdn.microsoft.com/en-us/library/acdd6hb7.aspx –

回答

1

什麼是設置_flavors的正確方法?

根據視圖模型的構造函數中的自定義邏輯,您可以將其設置爲您想要的任何List<IceCreamFlavor>

readonly修飾符意味着該字段的任何賦值必須作爲聲明的一部分或在同一類的構造函數中出現:https://msdn.microsoft.com/en-us/library/acdd6hb7.aspx

因此,您不能在ViewModel類的構造函數中設置此字段。初始化列表的部分顯然已被省略(「假設_flavors字段填充了數據庫或其他地方的真實冰淇淋口味」),但視圖模型類應該在其構造函數中創建List<IceCreamFlavor>,然後只需公開視圖可以綁定的IEnumerable<SelectListItem>。外部世界只知道IEnumerable。只有視圖模型類本身知道私人的_flavors字段。