2013-02-20 55 views
0

我有一個表,其中每行包含窗體的字段。與Html.DropDownList名稱迭代的麻煩

我重複使用此視圖:

@foreach (var item in Model) { } 

內的foreach,我創建裏面包含各個領域的一個新的錶行。例如: -

<tr><td> @Html.DropDownList("granny", "") </td></tr> 

「奶奶」正在通過控制器過去了,看起來有點像這樣:

ViewData["granny"] = new SelectList(db.getGrannies(), "grannyid", "grannyname"); 

一切是相當不錯的了。觀點是得到它的奶奶,並且一切看起來不錯。然而,我注意到該字段的名稱屬性{例如......

<select id="granny" name="granny"> 

}與創建的每一行都完全相同。這是個問題。我想把這些數據以FormCollection的形式返回給控制器,並且與所有這些奶奶一起做有趣的事情。如果他們沒有全部通過,我不能這樣做。

也就是說,我想在選擇閱讀,而不是像這樣:

<select id="granny1" name="granny1"> 
<select id="granny2" name="granny2"> 

我研究這個問題了一下,並使用

new { @Name="xyz" + n } 

嘗試,但Visual Studio中沒」那麼多。


短期和甜蜜的這一切是這樣的:

如何給ViewData的生成Html.DropDownLists自己獨特的IDS /名字嗎?

回答

1

我該如何爲ViewData生成的Html.DropDownLists賦予自己唯一的ID /名稱?

您不能更改生成的輸入字段的name,這是設計。只有id可以改變。這就是說你不應該這樣做。你可以做到以下幾點:

@for (var i = 0; i < Model.Count; i++) 
{ 
    <tr> 
     <td> 
      @Html.DropDownList(
       "selectedGranny", 
       (IEnumerable<SelectListItem>)ViewData["granny"] 
      ) 
     </td> 
    </tr>  
} 
+0

這工作。而且,將它轉換爲嚴格類型的視圖也有很長的路要走。謝謝! – shubniggurath 2013-02-20 15:28:58

1

好像你要麼試圖數據綁定的集合,或者你只是需要手動命名您的選擇(因爲它們是在Web表單上確實不同的控件)。

您可以使用以下過載傳遞HTML參數下拉:

@Html.DropDownList(
    "CategoryID", 
    (SelectList)ViewBag.CategoryId, 
    "--Select One--", 
    new{ //anonymous type 
      name = "granny1", 
      @class = "myCssClass", 
      onchange = "someFunction();" 
     }) 
+0

我試圖給她一個名字,而她什麼也沒做。也就是說,它不會改變呈現的名稱。 無論出於何種原因,將她轉換爲嚴格類型的視圖似乎都有效。感謝您的幫助和時間。 – shubniggurath 2013-02-20 15:27:37