Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting Multiple Selected Values in Html.DropDownlistFor

@Html.DropDownListFor(m => m.branch, CommonMethod.getBranch("",Model.branch), "--Select--", new { @multiple = "multiple" })  @Html.DropDownListFor(m => m.division, CommonMethod.getDivision(Model.branch,Model.division), "--Select--", new { @multiple = "multiple" }) 

I have two instances of DropDownListFor. I want to set selected as true for those which have previously stored values for Model.branch and Model.division. These are string arrays of stored ids

class CommonMethod {     public static List<SelectListItem> getDivision(string [] branchid , string [] selected)     {         DBEntities db = new DBEntities();         List<SelectListItem> division = new List<SelectListItem>();         foreach (var b in branchid)             {                 var bid = Convert.ToByte(b);                 var div = (from d in db.Divisions where d.BranchID == bid select d).ToList();                 foreach (var d in div)                 {                     division.Add(new SelectListItem { Selected = selected.Contains(d.DivisionID.ToString()), Text = d.Description, Value = d.DivisionID.ToString() });                 }             }         }          return division;     } } 

The returned value of division is selected as true for the selected item in the model, but on view side it is not selected.

like image 400
user Avatar asked Aug 29 '12 11:08

user


People also ask

What is a MultiSelect dropdown?

HTML MultiSelect Dropdown is a textbox control that allows the user to type or select multiple values from a list of predefined options. It has several out-of-the-box features such as data binding, filtering, grouping, tagging with custom values, and checkbox mode.

What is SelectListItem MVC?

SelectListItem is a class which represents the selected item in an instance of the System. Web. Mvc.


2 Answers

Use a ListBoxFor instead of DropDownListFor:

@Html.ListBoxFor(m => m.branch, CommonMethod.getBranch("", Model.branch), "--Select--")  @Html.ListBoxFor(m => m.division, CommonMethod.getDivision(Model.branch, Model.division), "--Select--") 

The branch and division properties must obviously be collections that will contain the selected values.

And a full example of the proper way to build a multiple select dropdown using a view model:

public class MyViewModel {     public int[] SelectedValues { get; set; }     public IEnumerable<SelectListItem> Values { get; set; } } 

that would be populated in the controller:

public ActionResult Index() {     var model = new MyViewModel();      // preselect items with values 2 and 4     model.SelectedValues = new[] { 2, 4 };      // the list of available values     model.Values = new[]     {         new SelectListItem { Value = "1", Text = "item 1" },         new SelectListItem { Value = "2", Text = "item 2" },         new SelectListItem { Value = "3", Text = "item 3" },         new SelectListItem { Value = "4", Text = "item 4" },     };      return View(model); } 

and in the view:

@model MyViewModel ... @Html.ListBoxFor(x => x.SelectedValues, Model.Values) 

It is the HTML helper that will automatically preselect the items whose values match those of the SelectedValues property.

like image 194
Darin Dimitrov Avatar answered Oct 12 '22 23:10

Darin Dimitrov


For me it works also for @Html.DropDownListFor:

Model:

public class MyViewModel {     public int[] SelectedValues { get; set; }     public IEnumerable<SelectListItem> Values { get; set; } } 

Controller:

public ActionResult Index() {     var model = new MyViewModel();      // the list of available values     model.Values = new[]     {         new SelectListItem { Value = "2", Text = "2", Selected = true },         new SelectListItem { Value = "3", Text = "3", Selected = true },         new SelectListItem { Value = "6", Text = "6", Selected = true }     };      return View(model); } 

Razor:

@Html.DropDownListFor(m => m.SelectedValues, Model.Values, new { multiple = "true" }) 

Submitted SelectedValues in controller looks like:

enter image description here enter image description here

like image 36
tonco Avatar answered Oct 12 '22 22:10

tonco