我在索引视图中从模型引用我的枚举时遇到了问题。 这是我的模型代码:
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")
但它是一个糟糕而丑陋的解决方案 - 默认情况下也加载了不需要的值。 在我的情况下,解决这个问题最优雅的方法是什么?
答案 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)