2017-01-04 7 views
0

インデックスビューのモデルからの列挙型への参照に問題があります。私は特定の結果をフィルタリングするための検索フィールドを持つインデックスビューでインデックスビューのモデルからの列挙型への参照

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; } } 

:ここに は私のモデルのコードです。あなたはまた、(私がHtml.EnumDropDownListFor @使用)UnitOfMeasure値を検索することができます - しかし、私は私のモデルからenumフィールドを直接参照することはできません - 私の見解が強く型付けされているので:

@model IEnumerable<Models.Product> 

でこのフィールドを表示するには選択の値は、私はトリックを使用します。

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

を、それは恐ろしいと醜いソリューションです - もデフォルトでロードされた不要な値で。 私の状況でこの問題を解決する最もエレガントな方法は何ですか?

あなたはこのようEnumHelper使用することができます
+0

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

OR

あなたは強く型付けされたビューに対して次のように行うことができますたとえば、「ProductDescription」。あなたが表示したスニペットは '@foreach(Model in var){'のようなものの中にあるべきで、 'model'引数を無視して' item'を使うだけです。 '@ H​​tml.EnumDropDownListFor(model => item.UnitOfMeasure、"単位の選択 ")' –

答えて

0

:それはあなたがアクセスする方法よりも異なるべきではない

@{ // 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) 
+0

ありがとうございました。それはまさに私が欲しいものです。 私は最初のオプションを選択しました。また、3番目の引数 - デフォルトのテキストを追加しました。 – Mateo

関連する問題