使用视图模型属性填充下拉列表:MVC 5,Razor

时间:2018-04-27 15:29:56

标签: asp.net-mvc object razor drop-down-menu viewmodel

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

1 个答案:

答案 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);
}