我有一个带有一些属性的视图,并希望为它创建一个下拉框。到目前为止,我已经在我的控制器上创建了一个selectListItem列表,并为其添加了值,此时,它可以工作并在下拉列表中显示这些项目。但是,我的问题是它根本没有链接到我在视图模型中的属性。我该如何修改?
控制器:
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();
视图模型:
public object Job { get; set; }
查看:
@using (Html.BeginForm(FormMethod.Post))
{
<center>
<div class="form-group">
@Html.DropDownList("jobs", (IEnumerable <SelectListItem>)ViewBag.jobs)
</div>
</center>
答案 0 :(得分:1)
传递给name
的{{1}}参数错误。它应该与viewmodel属性名称相同才能正确绑定:
DropDownList
由于您具有强类型的viewmodel,因此最好使用@Html.DropDownList("Job", (IEnumerable<SelectListItem>)ViewBag.jobs)
helper并将相应的viewmodel属性类型更改为与DropDownListFor
属性类型相同。此外,您可以使用类型为SelectListItem.Value
的属性来消除ViewBag
用法的强制转换,并将其直接分配给IEnumerable<SelectListItem>
:
<强>模型强>
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);
}