我在ASP.NET MVC表单中具有一个简单的表单,并且我有一个下拉列表,其中的值是从视图数据中提取的。如何从下拉列表到Controller对象中获取所选值的值?
@Html.LabelFor(model => model.ItemType)
@Html.DropDownList("ItemTypes", new SelectList((IEnumerable)ViewData["itemTypes"], "Value", "Text"))
<input type="submit" value="Request Item" />
ViewData["itemTypes"] = GetItemTypes();
[HttpPost]
public ActionResult NewVc(ItemInfoViewModel itemInfoObject)
{
//Item not populated to itemInfoObject
}
从
拉动项目类型 public static List<ListItem> GetItemTypes()
{
var itemTypes = new List<ListItem>
{
new ListItem {Text = "Select", Value = ""},
new ListItem {Text = "Item1", Value = "Item1"},
new ListItem {Text = "Item2", Value = "Item2"},
new ListItem {Text = "Item3", Value = "Item3"}
};
return itemTypes;
}
如果不存在,请添加新属性以存储所选选项
public class ItemInfoViewModel
{
public string SelectedItemType { set;get;}
// your existing properties
}
现在,在您的获取动作方法中,您可以在表格内使用Html.DropDownListFor
助手。
@model ItemInfoViewModel
@using(Html.BeginForm("NewVc","PutYourControllerNameHere"))
{
@Html.DropDownListFor(s=>s.SelectedItemType,
ViewData["itemTypes"] as List<SelectListItem>)
<input type="submit" />
}
用实际的控制器名称替换putyourcontrollernamehere,其中有NewVc
操作方法。您不需要Controller
后缀。
上面的代码基本上为选择元素的html标签生成了 form
标签中的名称" SelectItemType
"的html标签。提交表格时,模型活页夹将能够将发布的表单数据映射到您的ItemInfoViewModel
对象的属性,这是您的HTTPPOST操作方法的参数。
您也应该更改返回类型您的GetItemTypes
方法到SelectListItem
的集合,因为我们的视图代码正在尝试将其直接施放为List<SelectListItem>
public static List<SelectListItem> GetItemTypes()
{
var itemTypes = new List<SelectListItem>
{
new SelectListItem{Text = "Select", Value = ""},
new SelectListItem{Text = "Item1", Value = "Item1"},
new SelectListItem{Text = "Item2", Value = "Item2"},
new SelectListItem{Text = "Item3", Value = "Item3"}
};
return itemTypes;
}