我有一个下拉列表,想在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;
我该怎么办?
答案 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
作为模型属性。
我们在这里使用了隐式传递,即SelectListItem
和ViewBag
(即DropDownListValue
)使用了相同的名称。
然后,当您点击Submit
时,您需要HttpPost
的{{1}}方法:
SomeAction
参考文献: DotNetFiddle Example , Using the DropDownList Helper with ASP.NET MVC