@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.
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.
SelectListItem is a class which represents the selected item in an instance of the System. Web. Mvc.
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.
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:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With