我有一个表,其中每行包含表单的字段。
我使用这个迭代视图:
@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 /名称?
答案 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();"
})