ASP.NET MVC使用FormCollection从DropDownList()获取值

时间:2018-10-06 12:53:41

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

我有一个简单的Razor语法下拉列表:

@{
   List<SelectListItem> listItems = new List<SelectListItem>();
   listItems.Add(new SelectListItem { Text = "1 kg", Value = "1" });
   listItems.Add(new SelectListItem { Text = "2 kg", Value = "2" });
   listItems.Add(new SelectListItem { Text = "3 kg", Value = "3" });
   listItems.Add(new SelectListItem { Text = "4 kg", Value = "4" });
   listItems.Add(new SelectListItem { Text = "5 kg", Value = "5" });
   }
   @Html.DropDownList("Weight", (IEnumerable<SelectListItem>)listItems, new { @class = "form-control" })
   @Html.Hidden("Weight", 0)

我还有一个Controller动作,该动作通过FormCollection从表单获取数据,定义为:

    [HttpPost]
    public ActionResult AddProductsToCart(FormCollection collection /*int ?Id*/)
    {
        MyDBContext myDBContext = new MyDBContext();
        var value = collection["Weight"];
    }

但是在提交表单时,我无法在collection的下拉列表中获取所选索引的值。相反,我得到1, 1, 1作为collection中唯一的单个键。

任何想法将不胜感激。 :)

2 个答案:

答案 0 :(得分:0)

当我在ASP.NET MVC 4应用程序中尝试您的代码时,

HTML对于两个HTML控件具有两个相同的ID,如下所示:

<form method="GET" action="{% url 'pastebin_app:search' %}">

因此,当您从FormCollection类访问数据时,它会在HTML上找到两个ID,因此它会以逗号@Html.DropDownList("Weight", (IEnumerable<SelectListItem>)listItems, new { @class = "form-control" }) @Html.Hidden("Weight", 0) 分隔每个控件值,例如[不确定原因]:

enter image description here

因此,如果您只想从该特定控件的View中获得一个值,则可以在以下方法中使用一个与控件名称同名的变量:

,

答案 1 :(得分:0)

感谢您的亲切回应。 FormCollection返回返回的所有下拉菜单的值。