2012-10-30 52 views
2

加載多個具有相同名稱的DropDownLists時遇到問題。我附上我的代碼在這裏:具有相同名稱的多個DropDownLists(在foreach語句中)

查看:

@{ 
    int i = 1 

    foreach (var queue in Model.Queues) 
    { 
      using (Html.BeginForm("ChangeQueueState", "Home", FormMethod.Post)) 
      { 
       List<SelectListItem> sli = ViewBag.states[i - 1]; 
      <div>@Html.DropDownList("state", sli)</div> 
      } 
    } 
    i++ 
} 

有,我沒有顯示視圖裏面更多的代碼。

在我的控制器中,我只需更改相應隊列的狀態並將其加載爲SelectedListItem的列表ViewBag.states,其中包含每個隊列的狀態列表,其狀態列表的狀態列表均爲'Selected'。

問題是,當視圖加載時,所有的DropDownLists加載最後修改狀態。例如,如果我將第五個隊列從「打開」更改爲「已關閉」,則所有DropDownLists都會顯示,並選中「Closed」選項(儘管在數據庫中更改已正確應用)。

我認爲這個問題是由於綁定MVC的DropDownList名稱和相關的SelectListItem之間的做法,但我不能DDL名稱更改爲"state" + @i,因爲在「ChangeQueueState」接收的參數狀態,必然我的控制器的方法。

我真的很感謝你的幫助。提前致謝!

+3

那麼,編輯幫手是爲這種情況設計的。您將需要一個編輯器模板來處理任何「模型」repersents,而在其中,您將再次使用EditorFor來重新插入每個「Queues」。使模型聯編程序工作的命名約定是「Queues [#]。state」,其中#是列表中的索引。當你的視圖顯示一個模型並且你試圖發佈到另一個動作的表單接受不同類型的模型時,它會使事情複雜化,因爲命名約定將關閉(正如你所看到的) –

回答

0

我想你應該爲每個下拉列表使用不同的名稱。假設每個隊列具有不同的ID,所以儘量改用此代碼:

<div>@Html.DropDownList("state" + queue.ID, sli)</div> 

當然,你需要區分哪些是其集合英寸 我經常這樣做,希望它適用於你。

相關問題