MVC2 SelectedListItem не привязан к ViewModel - PullRequest
1 голос
/ 16 февраля 2011

У меня проблема с элементом 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 Ответ

1 голос
/ 16 февраля 2011

Итак, где находится строка кода, которая переводит

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;
}

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

...