2016-11-02 15 views
0

Asp.NetCore EntityFrameWorkCore リポジトリパターンドロップダウンがここにいくつかの名前空間を表示するしかし私のプロジェクトのビルドLinqを使用してドロップダウンを設定しますか?

:ここ Dropdown display namespace code instead of commodities

が私のコードです:

モデル:

public partial class Commodity 
    { 
     public Commodity() 
     { 

     } 
     public IEnumerable<SelectListItem> CommodityCodes { get; set; }; 
     [Key] 
     public Guid Oid { get; set; } = Guid.NewGuid(); 
     public string Code { get; set; } 
     public string Description { get; set; } 
} 

インタフェース+リポジトリ:

public interface ICommodityRepository 
{ 


    IEnumerable<Commodity> ListAll(); 
    IEnumerable<string> GetCommodityDropDown(); 
    IEnumerable<SelectListItem> GetSelectListItems(IEnumerable<string> elements); 

} 

Repository: 
     public IEnumerable<string> GetCommodityDropDown() 
     { 
      Commodity model = new Commodity(); 
      var commodities = from c in model.Oid.ToString() 
           select c; 
      return new List<string> 
      { 
       commodities.ToString() 

      }; 
     } 
     public IEnumerable<SelectListItem> GetSelectListItems(IEnumerable<string> elements) 
     { 
      var selectList = new List<SelectListItem>(); 

      foreach (var element in elements) 
      { 
       selectList.Add(new SelectListItem 
       { 
        Value = element, 
        Text = element 
       }); 
      } 

      return selectList; 
     } 

コントローラー:

public IActionResult Index() 
{ 
    var codes = _commodityRepository.GetCommodityDropDown(); 
    var model = new Commodity(); 
    model.CommodityCodes = _commodityRepository.GetSelectListItems(codes); 
    return View(model); 
} 

そして最後に私の見解:

<div class="form-group"> 
 
    @Html.DropDownListFor(m => m.Code, Model.CommodityCodes, 
 
"- Please select a Commodity -",new { @class = "form-control" }) 
 
    </div>

+1

あなたはIMPLしようとしている場合selectListを作成し、SelectListコンストラクタを使用してください。 'new SelectList(context.Countries、" Oid "、" Code ")' https://msdn.microsoft.com/en-us/library/system.web.mvc .selectlist.selectlist(v = vs.118).aspx – JamieD77

+0

または 'IEnumerable Countries = context.Countries.Select(x =>新しいSelectListItem {値= x.Oid、テキスト= x.Code}); ' –

+0

ありがとう。あなたはどのような種類の財産をすべきか教えてください。 SelectListItem?間接的に ?? –

答えて

1

これを行います...

public interface ICommodityRepository 
{ 
    SelectList ListAll(); 
} 

public class CommodityRepository : ICommodityRepository 
{ 
    private DataBaseContext db = new DataBaseContext(); 
    // Note: Your database context should define this property: 
    //  public DbSet<Commodity> CommoditySet{ get; set; } 

    public SelectList ListAll(){ 
     return new SelectList(db.CommoditySet, "Oid", "Oid"); 
    } 
} 
Define a view model: 
Note: You shouldn't use your model here. Define a view model instead 
public class CommodityViewModel 
{ 
    public string Code{ get; set; } 
    public SelectList CommodityCodes{ get; set; } 
} 

Controller: 

public IActionResult Index() 
{ 
    CommodityViewModel viewModel= new CommodityViewModel(); 
    viewModel.CommodityCodes= repository.ListAll(); 

    return View(viewModel); 
} 

view: 

    <div class="form-group"> 
     @Html.DropDownListFor(m => m.Code, Model.CommodityCodes, 
"- Please select a Commodity -",new { @class = "form-control" }) 
    </div> 
+0

issacに感謝します。これはうまくいった。 Oidをパラメータとして2回渡す必要があるのはなぜですか? –

+0

こんにちはEB、最初のOidは、選択HTML要素(DropDownList)の値を表し、2番目のOidは、選択のテキストを表します。つまり、ユーザーに表示される値 – Issac

関連する問題