在索引视图

时间:2017-01-04 09:22:10

标签: asp.net-mvc entity-framework enums

我在索引视图中从模型引用我的枚举时遇到了问题。 这是我的模型代码:

public enum UnitOfMeasure {
    Item,
    Kilogram,
    Liter, }

public class Product {
    public Product() {
        ProductOccurences = new List<ProductOccurence>(); }

    [Key]
    public int ProductId { get; set; }
    public int ProductPhotoId { get; set; }
    public UnitOfMeasure? UnitOfMeasure { get; set; }
    public string ProductDescription { get; set; }
    public virtual ProductPhoto Photo { get; set; }
    public virtual ICollection<ProductOccurence> ProductOccurences { get; set; } }

在索引视图中,我有搜索字段用于过滤特定结果。你也可以搜索UnitOfMeasure值(我使用@ Html.EnumDropDownListFor) - 但是我不能直接引用我模型中的枚举字段 - 因为我的视图是强类型的:

@model IEnumerable<Models.Product>

要使用选择的值显示此字段,我使用技巧:

@Html.EnumDropDownListFor(model => model.FirstOrDefault().UnitOfMeasure, "Select unit of measure")

但它是一个糟糕而丑陋的解决方案 - 默认情况下也加载了不需要的值。 在我的情况下,解决这个问题最优雅的方法是什么?

1 个答案:

答案 0 :(得分:0)

您可以像这样使用EnumHelper:

@Html.DropDownList("UnitOfMeasure", EnumHelper.GetSelectList(typeof(UnitOfMeasure)))

OR

对于强类型视图,您可以这样做:

@{ // you can put the following in a back-end method and pass through ViewBag
    var selectList = Enum.GetValues(typeof(UnitOfMeasure))
                         .Cast<UnitOfMeasure>()
                         .Select(e => new SelectListItem
                             {
                                 Value = ((int)e).ToString(),
                                 Text = e.ToString()
                             });
}
@Html.DropDownListFor(m => m.UnitOfMeasure, selectList)