MVC 4 Html.ListBoxFor Model MultiSelectList IEnumerable Error?

Posted on 2014-01-13
Last Modified: 2014-01-19
I have successfully using the Html.ListBox with a ViewData like so:

ViewData["GroupsList"] = new MultiSelectList(myGroups.GetAllGroups(), "GroupID", "GroupName");

@Html.ListBox("lbxGroups", (MultiSelectList)ViewData["GroupsList"], new { SelectionMode = "Single" })

Now I want to use the Model and having issues doing so.

I received this error when using Model.UserGroupList:

"The parameter 'expression' must evaluate to an IEnumerable when multiple selection is allowed."

Note: the Action returns the correct data.

public ActionResult Index()
       ManagerViewModel viewModel = new ManagerViewModel()
                UserGroupsList = new MultiSelectList(myGroups.GetAllGroups(), "GroupID", "GroupName")
            return View(viewModel);

@model ProjectUI.ManagerViewModel
@Html.ListBoxFor(model => model.GroupId, new MultiSelectList(Model.UserGroupsList, "Value", "Text"), new { SelectionMode = "Single" }))

public class ManagerViewModel
        public int GroupId { get; set; }
        public MultiSelectList UserGroupsList { get; set; }
Question by:WorknHardr
  • 3
LVL 16

Accepted Solution

Imran Javed Zia earned 500 total points
ID: 39778720

If you have single selection, then technically you may use dropdown. Please try following:

@Html.ListBoxFor(model => model.GroupId,
                new SelectList(Model.UserGroupsList, "Value", "Text"))

for more information, please refer to following:


Author Comment

ID: 39779504
Same error:
"The parameter 'expression' must evaluate to an IEnumerable when multiple selection is allowed."

Until.... I change the Action to SelectList from MultiSelectList like so:

     ManagerViewModel viewModel = new ManagerViewModel()
                UserGroupsList = new SelectList(myGroups.GetAllGroups(), "GroupID", "GroupName")

Q. Why do I find code snippets elsewhere using the MultiSelectList?

Author Comment

ID: 39779733
Just tried this example and get the same working result as your suggestion, without using a SelectList in the view.

View model:
public class MyViewModel
    public int[] SelectedIds { get; set; }
    public IEnumerable<SelectListItem> Items { get; set; }

public ActionResult Index()
    var model = new MyViewModel
        // fetch the items from some data source
        Items = Enumerable.Select(x => new SelectListItem
            Value = x.Id,
            Text = "item " + x.Id
    return View(model);

@model MyViewModel
@Html.ListBoxFor(x => x.SelectedIds, Model.Items)

Author Closing Comment

ID: 39792647

Featured Post

Do You Know the 4 Main Threat Actor Types?

Do you know the main threat actor types? Most attackers fall into one of four categories, each with their own favored tactics, techniques, and procedures.

Join & Write a Comment

I recently went through the process of creating a Calendar Control of events with the basis of using a database to keep track of the dates that are selectable, one requirement was to have the selected date pop-up in a simple lightbox.  At first this…
International Data Corporation (IDC) prognosticates that before the current the year gets over disbursing on IT framework products to be sent in cloud environs will be $37.1B.
Excel styles will make formatting consistent and let you apply and change formatting faster. In this tutorial, you'll learn how to use Excel's built-in styles, how to modify styles, and how to create your own. You'll also learn how to use your custo…
Get a first impression of how PRTG looks and learn how it works.   This video is a short introduction to PRTG, as an initial overview or as a quick start for new PRTG users.

758 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

17 Experts available now in Live!

Get 1:1 Help Now