MVC2 SelectedListItem not binding to ViewModel

645 views Asked by At

I am having a problem with a selectlistitem, the values of which are being retrieved from a database.

It is displaying the list of items in the view, but it is not passing through (POSTing) the selected value into the model.

So when the user submits, or the page reloads due to validation, the select value (PositionApplied) is empty.

Can anyone give me some pointers as to where I am going wrong?

In my controller:

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

In my ViewModel

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

In my View

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

Thanks in advance for any pointers!

1

There are 1 answers

6
balexandre On BEST ANSWER

So, where is the code line that get's the

ViewData["PositionApplied"] = items;

into

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

something like:

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

and you can simple use in your View:

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

...

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

or is there some of automagical happening under MVC2 that I'm not aware about? As I use the example I give you, all the time.


Added

in order to avoid Linq to Entities error (if you are using it) change your method to

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

and all will work fine.