所以在我看来,我在for循环中动态创建下拉列表。我在唯一的id值中使用相同的名称值。
@foreach(var item in Model.Items)
{
@Html.DropDownList("Items" Model.GenerateSelectList(item.id), new { id = item.id })
}
在我的控制器操作方法中,我可以获得下拉列表的值:
[HttpPost]
[ValidateAntiForgeryToken]
[Authorize]
public ActionResult ClassicLineup(IList<int> items)
{
}
我无法弄清楚如何获得 BOTH 下拉列表ID和相关值。
似乎它应该很简单,但它让我难过......
感谢。
答案 0 :(得分:2)
在表单提交浏览器上只发送下拉列表的选定值,因此没有机制来读取所选项目的文本,但您可以为您创建一个。
在下面的代码中,我创建了一个隐藏的输入,用于存储当前所选项目的文本,并在表单上发送到服务器。
您可以在控制器或视图中创建以下列表(控制器中的首选位置);
var items= (from item in Model.Items
select new SelectListItem
{
Value= item.DisplayProperty
Text= item.Value
}).toList();
<form action="controller/test">
@*This will create DD*@
@Html.DropDownList("MyDropDownList", items)
@*Hidden input*@
<input type="hidden" id="ddSelectedName" name="ddSelectedName" />
<br>
<input type="submit" value="submit"/>
</form>
在您的代码中包含jQuery,然后添加
<script type="text/javascript">
$('#MyDropDownList').change(function () {
$('#ddSelectedName').val($(this).find(':selected').text());
});
</script>
<强>控制器强>
public string test(string MyDropDownList, string ddSelectedName)
{
return MyDropDownList+ "--"+ddSelectedName ;
}
答案 1 :(得分:0)
我最后通过表单集合循环并解析了下拉列表id(form.key)和下拉值(form.key.value)。
显然,没有一种简单的方法可以让MVC将下拉值和id绑定到控制器操作参数中的集合。