ASP.NET MVC从基于ViewData的下拉列表中提取所选值



我在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;
 }

相关内容

最新更新