2017-04-02 122 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字段。