0

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

我使用这个在视图中迭代:

@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 提供自己的唯一 ID/名称?

4

2 回答 2

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>    
}
于 2013-02-20T14:15:36.163 回答
1

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

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

@Html.DropDownList(
    "CategoryID", 
    (SelectList)ViewBag.CategoryId, 
    "--Select One--", 
    new{  //anonymous type
          name = "granny1",
          @class = "myCssClass", 
          onchange = "someFunction();"
       }) 
于 2013-02-20T14:55:03.777 回答