53

If you have a select list set to multiple in ASP.NET MVC, how does the modelbinding work?

What does it return for your selected items, an array?

<SELECT NAME="toppings" MULTIPLE SIZE=5>
    <option value="mushrooms">mushrooms</option>
    <option value="greenpeppers">green peppers</option>
    <option value="onions">onions</option>
    <option value="tomatoes">tomatoes</option>
    <option value="olives">olives</option>
</SELECT>

3 Answers 3

29

Yes, by default a multiselectlist will post through an array of the selected values.

This article has further information, including how to use strongly-typed views with a multiselectlist.

From the linked "article":

  • Your model or view model class needs a collection property for the IDs for the selected option items, e.g. List<int> ToppingIds.
  • In the controller action method to which the form containing your multi-select-list POSTs, you can access the selected option items thru the collection property you added to the model or view model class.
Sign up to request clarification or add additional context in comments.

Comments

26

Yes, it returns an array.

View model:

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

Controller:

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

View:

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

Comments

8

In VegTableViewmodel:

public IEnumerable<MultiSelectList> Vegetables { get; set; }

In the Controller: Get vegetables list, and then pass it to the VegTableViewModel's Vegetables property.

viewmodel.Vegetables = vegetables .Select(d => new MultiSelectList(d.VegName));

In the View:

@Html.ListBoxFor(m => m.L, new MultiSelectList(Model.Vegetables.Select(d => d.Items))

Comments

Your Answer

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