2015-08-09 61 views
-1

這裏是我的代碼:綁定DropDownListFor在的foreach,ASP.NET MVC

視圖模型

public class FooViewModel{ 
    public Guid BarId { set;get } 
} 

查看:

@model IEnumerable<FooViewModel> 
@foreach (var c in Model) 
{ 
    <div> 
     @Html.DropDownListFor(o => c.BarId , (List<SelectListItem>)ViewBag.BarCollection) 
    </div> 
} 

問題DropDownListFor完全創建選項,但沒有按結合」工作。

回答

2

您不能使用foreach循環來爲集合中的項目生成控件。如果你檢查html,你會看到你有沒有索引器name屬性重複(也是重複id屬性是無效的HTML)。對於FooViewModel,您需要for自定義EditorTemplate的循環。使用for循環(你的模型必須實現IList<T>

@model IList<FooViewModel> 
for (int i = 0; i < Model.Count; i++) 
{ 
    @Html.DropDownListFor(m => m[i].BarId, ....) 
} 

注意HTML現在將

<select name="[0].BarId" ..> 
<select name="[1].BarId" ..> 

+1

邊注:沒有與此包括,如果其他一些問題您編輯已設置「BarId」值的現有項目,則在顯示視圖時仍會始終選擇第一個選項(儘管它將正確回發)。但是,直到我看到你的控制器代碼,我才能向你顯示修復它的正確方法 - 但實質上你需要在每次迭代中生成一個新的「SelectList」 –