在ViewModel上设置私有属性

时间:2017-04-02 19:39:56

标签: c# asp.net-mvc asp.net-mvc-5

我已经按照本教程在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 :(得分:1)

  

设置_flavors的正确方法是什么?

您可以根据视图模型的构造函数中的自定义逻辑将其设置为您想要的任何List<IceCreamFlavor>

readonly修饰符表示对字段的任何赋值必须作为声明的一部分或在同一类的构造函数中出现:https://msdn.microsoft.com/en-us/library/acdd6hb7.aspx

因此,您无法在ViewModel类的构造函数中的任何位置设置此字段。初始化列表的部分显然已从示例中省略(“假设_flavors字段填充了来自数据库或其他地方的真正冰淇淋口味”)但视图模型类是应该在其构造函数中创建List<IceCreamFlavor>,然后简单地公开视图可以绑定的IEnumerable<SelectListItem>。外界只知道 IEnumerable 。只有视图模型类本身才知道私有_flavors字段。