Заполните раскрывающийся список свойством модели представления: MVC 5, Razor - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть представление с несколькими свойствами, и я хочу создать для него раскрывающийся список. До сих пор я создал список 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>

1 Ответ

0 голосов
/ 28 апреля 2018

Ваш name аргумент, переданный DropDownList, неверен. Должно совпадать с именем свойства viewmodel для правильного связывания:

@Html.DropDownList("Job", (IEnumerable<SelectListItem>)ViewBag.jobs)

Поскольку у вас строго типизированная viewmodel, лучше использовать помощник DropDownListFor и изменить соответствующий тип свойства viewmodel, чтобы он совпадал с типом свойства 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);
}

View

@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>
}
...