我有一个具有一些属性的视图,并想为其创建一个下拉框。到目前为止,我在控制器上创建了SelectListItems的列表,并为其添加了值,目前,它在下拉列表中起作用并显示项目。但是,我的问题是,它根本没有与我在视图模型中拥有的属性联系在一起。我该如何修改这个?
控制器:
List<SelectListItem> jobs = new List<SelectListItem>();
SelectListItem job1 = new SelectListItem() { Text = "Email", Value = "1", Selected = false };
SelectListItem job2 = new SelectListItem() { Text = "OtherJob", Value = "2", Selected = false };
SelectListItem job3 = new SelectListItem() { Text = "OtherJob2", Value = "3", Selected = false };
SelectListItem job4 = new SelectListItem() { Text = "OtherJob3", Value = "4", Selected = false };
SelectListItem job5 = new SelectListItem() { Text = "OtherJob4", Value = "5", Selected = false };
SelectListItem job6 = new SelectListItem() { Text = "OtherJob5", Value = "6", Selected = false };
SelectListItem job7 = new SelectListItem() { Text = "OtherJob6", Value = "7", Selected = false };
SelectListItem job8 = new SelectListItem() { Text = "OtherJob7", Value = "8", Selected = false };
jobs.Add(job1);
jobs.Add(job2);
jobs.Add(job3);
jobs.Add(job4);
jobs.Add(job5);
jobs.Add(job6);
jobs.Add(job7);
jobs.Add(job8);
ViewBag.jobs = jobs;
return View();
ViewModel:
public object Job { get; set; }
查看:
@using (Html.BeginForm(FormMethod.Post))
{
<center>
<div class="form-group">
@Html.DropDownList("jobs", (IEnumerable <SelectListItem>)ViewBag.jobs)
</div>
</center>
传递给 DropDownList
的 name
参数是错误的。它应该与ViewModel属性名称相同以正确绑定:
@Html.DropDownList("Job", (IEnumerable<SelectListItem>)ViewBag.jobs)
由于您具有强大的ViewModel,因此最好使用DropDownListFor
助手并更改相应的ViewModel属性类型与SelectListItem.Value
属性类型相同。另外,您可以使用具有IEnumerable<SelectListItem>
类型的属性从ViewBag
使用中消除铸件,并将其直接分配给DropDownListFor
:
模型
public class ViewModel
{
public int Job { get; set; }
public List<SelectListItem> Jobs { get; set; }
}
控制器
[HttpGet]
public ActionResult ControllerName()
{
var model = new ViewModel();
model.Jobs = new List<SelectListItem>();
model.Jobs.Add(new SelectListItem() { Text = "Email", Value = "1", Selected = false });
// assign other SelectListItem list values here
return View(model);
}
查看
@model ViewModel
@using (Html.BeginForm("ActionName", "ControllerName", FormMethod.Post))
{
<div style="text-align:center">
<div class="form-group">
@Html.DropDownListFor(m => m.Job, Model.Jobs)
</div>
</div>
}