10

In my viewModel I have:

public class PersonViewModel
{
    public Person Person { get; set; }
    public int SelectRegionId { get; set; }
    public IEnumerable<SelectListItem> Regions { get; set; }
}

But what do I have to do in my Controller/View to show the values? What I have now:
Controller:

public ActionResult Create()
{
     var model = new ReUzze.Models.PersonViewModel
     {
         Person = new Person(),
         Regions = new SelectList(this.UnitOfWork.RegionRepository.Get(), "Id", "Name")
     };
     return View(model);
}

View:

 <div class="form-group">
     @Html.LabelFor(model => model.Person.Address.Region)
     @Html.DropDownListFor(model => model.SelectRegionId, new SelectList(Model.Regions, "Id", "Name"), "Choose... ")
 </div>

But it gives an error like this:

Cannot implicitly convert type 'System.Web.Mvc.SelectList' to 'System.Collections.Generic.IEnumerable<System.Web.WebPages.Html.SelectListItem>'. An explicit conversion exists (are you missing a cast?)
2
  • Can you add the error message you are receiving? Commented Dec 13, 2013 at 13:12
  • The Regions property in the model should be a normal list of items. Don't set it to a SelectList. Commented Dec 13, 2013 at 13:13

2 Answers 2

13

Your ViewModel has a property of type 'IEnumerable', but SelectList does not satisfy that type. Change your code like this:

public class PersonViewModel
{
    public Person Person { get; set; }
    public int SelectRegionId { get; set; }
    public SelectList Regions { get; set; }
}

View:

<div class="form-group">
     @Html.LabelFor(model => model.Person.Address.Region)
     @Html.DropDownListFor(model => model.SelectRegionId, Model.Regions, "Choose... ")
 </div>
Sign up to request clarification or add additional context in comments.

Comments

7

You are creating SelectList instance twice. Get rid of one of them:

@Html.DropDownListFor(model => model.SelectRegionId, Model.Regions, "Choose... ")

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.