MVC2 SelectedListItem не привязан к ViewModel

У меня проблема с элементом selectlist, значения которого извлекаются из базы данных.

Он отображает список элементов в представлении, но не передает (POSTing) выбранное значение в модель.

Поэтому, когда пользователь отправляет или страница перезагружается из-за проверки, значение выбора (PositionApplied) будет пустым.

Кто-нибудь может дать мне несколько советов о том, где я иду не так?

В моем контроллере:

    [HttpGet]
    public ActionResult Index()
    {
        PopulateJobsDropdown();
        return View();
    }

    private void PopulateJobsDropdown()
    {
        IEnumerable<SelectListItem> items = _service.GetJobs()
            .Select(c => new SelectListItem
                             {
                                 Value = c.JobID.ToString(),
                                 Text = c.JobTitle
                             });
        ViewData["PositionApplied"] = items;
    }

В моей ViewModel

 public IEnumerable<SelectListItem> PositionApplied { get; set; }

По-моему

<%=Html.DropDownList("PositionApplied")%>

Заранее спасибо за любые указатели!

1 ответ

Решение

Итак, где находится строка кода, которая получает это

ViewData["PositionApplied"] = items;

в

public IEnumerable<SelectListItem> PositionApplied { get; set; }

что-то вроде:

this.PositionApplied = ViewData["PositionApplied"] as IEnumerable<SelectListItem>;

и вы можете просто использовать в своем представлении:

<%
    IEnumerable<SelectListItem> PositionApplied = 
          ViewData["PositionApplied"] as IEnumerable<SelectListItem>;
%>

...

<%= Html.DropDownList("myDropDOwnId", PositionApplied) %>

или есть какие-то автоматические события под MVC2, о которых я не знаю? Как я использую пример, который я вам даю, все время.


добавленной

во избежание ошибки Linq to Entities (если вы ее используете) измените ваш метод на

private void PopulateJobsDropdown()
{
    IQueryble<Your_Table> jobs = _service.GetJobs();
    List<SelectListItem> items = new List<SelectListItem>();
    foreach(var job in jobs)
        items.add(new SelectListItem
                      {
                         Value = c.JobID.ToString(),
                         Text = c.JobTitle
                      });
    ViewData["PositionApplied"] = items;
}

и все будет работать нормально.

Другие вопросы по тегам