带有视图模型属性的下拉列表:MVC 5,剃须刀



我有一个具有一些属性的视图,并想为其创建一个下拉框。到目前为止,我在控制器上创建了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>

传递给 DropDownListname参数是错误的。它应该与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>
}

最新更新