将一组HTML.DropDownList值发布到控制器操作方法

时间:2011-08-06 01:59:26

标签: asp.net-mvc

所以在我看来,我在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和相关值。

似乎它应该很简单,但它让我难过......

感谢。

2 个答案:

答案 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绑定到控制器操作参数中的集合。