麻烦Html.DropDownList的名称迭代

时间:2013-02-20 14:11:02

标签: c# razor asp.net-mvc-4 html-select

我有一个表,其中每行包含表单的字段。

我使用这个迭代视图:

@foreach (var item in Model) { }

在foreach中,我创建了一个包含内部各种字段的新表行。 e.g:

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

“granny”正在通过控制器传递,看起来有点像这样:

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提供自己独特的ID /名称?

2 个答案:

答案 0 :(得分: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>    
}

答案 1 :(得分:1)

您似乎要么想要对数据集进行数据绑定,要么只需要手动命名您的选择(因为它们在Web表单上实际上是不同的控件)。

您可以使用以下重载将html参数传递给下拉列表:

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