我有一个简单的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
中唯一的单个键。
任何想法将不胜感激。 :)
答案 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)
分隔每个控件值,例如[不确定原因]:
因此,如果您只想从该特定控件的View中获得一个值,则可以在以下方法中使用一个与控件名称同名的变量:
,
答案 1 :(得分:0)
感谢您的亲切回应。 FormCollection返回返回的所有下拉菜单的值。