2017-08-30 23 views
1

のasp.net MVCでは、複数行のデータバインディング部分的)モデル:SelectListのは、私は、オブジェクトのリストを持っているところ、私は問題を持っている

public List<MenuProduct> MenuProducts { get; set; } 
    public SelectList ContractTypes { get; set; } 
    public SelectList Contracts { get; set; } 

そして、私はこのようなビューでそれらを結合しています:

@for (int i = 0; i < Model.MenuProducts.Count(); i++) 
    { 
     <tr> 
      <td>@Html.TextBoxFor(x => x.MenuProducts[i].Title, new { @class = "form-control" })</td> 
      <td>@Html.TextBoxFor(x => x.MenuProducts[i].Factor, new { @class = "form-control" })</td> 
      <td>@Html.TextBoxFor(x => x.MenuProducts[i].JointFactor, new { @class = "form-control" })</td> 
      <td>@Html.DropDownListFor(x => x.MenuProducts[i].ContractTypeID, Model.ContractTypes, new { @class = "form-control" })</td> 
      <td>@Html.DropDownListFor(x => x.MenuProducts[i].ContractID, Model.Contracts, new { @class = "form-control" })</td>    
     </tr> 
    } 

問題は、データが読み込まれたときに、契約と契約タイプに共有リストを使用しているため、選択リストが決して適切な値で選択されないということです。

私はこのような部分図に各項目を移動した場合:このモデルでは

@for (int i = 0; i < Model.MenuProducts.Count(); i++) 
    { 
     @Html.RenderPartial("_MenuProductItemPartialView", new MenuProductItemModel() { Item = Model.MenuProducts[i], ContractTypes = Model.ContractTypes, Contracts = Model.Contracts})    
    } 

public MenuProduct Item { get; set; } 
    public SelectList ContractTypes { get; set; } 
    public SelectList Contracts { get; set; } 

選択リスト内の値は正しいですが、その後、私は持つことができません一度にすべての行を更新する外部ページのボタン - 少なくとも、私はそれを行う方法を知らない。

私の質問は、セレクトリストを最初の方法(List<MenuProduct>をポストバックできる場所)で動作させるにはどうすればよいのですか?また、それぞれの部分から2番目の方法ですべての更新データを収集する方法は?任意の行または多数の行から変更されたデータが存在する可能性があるためです。

答えて

1

選択した値で各行のフライでSelectListを構築することができます。

@Html.DropDownListFor(x => x.MenuProducts[i].ContractTypeID, new SelectList(Model.ContractTypes, "Value", "Text", Model.MenuProducts[i].ContractTypeID), new { @class = "form-control" }) 
+0

この質問は技術的に重複していますが(私は検索時にそれを見つけられませんでしたが)、あなたの答えは直接であり、IMOは理解しやすくなります。 –

関連する問題