将下拉列表值传递给控制器

时间:2018-11-26 11:12:50

标签: c# asp.net asp.net-mvc model-view-controller drop-down-menu

我有一个下拉列表,想在Controller中传递值。查看

@using (Html.BeginForm())
{  
    @Html.DropDownList("dropOrg", ViewBag.dropOrg as SelectList)
    <input type="submit" value="save" />
}

控制器

foreach (int tmp in org)
{
   string s = tmp + " - " + orgNames[tmp];
   SelectListItem item1 = new SelectListItem() { Text = s, Value = tmp.ToString() };
   items.Add(item1);
}
ViewBag.dropOrg = items;

我该怎么办?

1 个答案:

答案 0 :(得分:1)

为您的View创建ViewModel会更好:

public class SampleViewModel
{
    public string DropDownListValue { get; set; }
}

然后在控制器的get方法中:

public ActionResult SomeAction()
{
    var org = GetOrg(); //your org
    var orgNames = GetOrgNames(); //your orgNames

    // . . .

    ViewBag.DropDownListValue = new SelectList(org.Select(s => 
    new SampleViewModel 
    {  
        DropDownListValue = $"{s} - {orgNames[s]}"
    }, "DropDownListValue", "DropDownListValue");
    return View(new SampleViewModel())
}

您的SomeAction视图:

@model YourAppNamespace.SampleViewModel
<h1>Hello Stranger</h1>

@using (Html.BeginForm())
{
    @Html.DropDownList("DropDownListValue")
    <input type="submit" value="Submit"/>
}

请注意:

  

用于创建HTML选择列表的DropDownList助手   需要一个IEnumerable<SelectListItem>,无论是显式的还是   隐含地。也就是说,您可以通过IEnumerable<SelectListItem>   明确地添加到DropDownList助手中,或者您可以添加   IEnumerable<SelectListItem>ViewBag使用相同的名称   SelectListItem作为模型属性。

我们在这里使用了隐式传递,即SelectListItemViewBag(即DropDownListValue)使用了相同的名称。

然后,当您点击Submit时,您需要HttpPost的{​​{1}}方法:

SomeAction

参考文献: DotNetFiddle Example Using the DropDownList Helper with ASP.NET MVC