Getting Multiple Selected Values in Html.DropDownlistFor

前端 未结 3 1501
名媛妹妹
名媛妹妹 2020-12-13 06:50
@Html.DropDownListFor(m => m.branch, CommonMethod.getBranch(\"\",Model.branch), \"--Select--\", new { @multiple = \"multiple\" })

@Html.DropDownListFor(m => m         


        
相关标签:
3条回答
  • 2020-12-13 07:04

    Though quite old thread but posting this answer after following other answers here, which unfortunately didn't work for me. So, for those who might have stumbled here recently or in near future, Below is what has worked for me.

    This is what helped me

    The catch for me was MultiSelectList class and I was using SelectList.

    Don't know situation in 2012 or 2015. but, now both these helper methods @Html.DropDownListFor and @Html.ListBoxFor helper methods accept IEnumerable<SelectListItem> so you can not pass any random IEnumerable object and expect these helper methods to do the job.

    These helper methods now also accept the object of SelectList and MultiSelectList classes in which you can pass the selected values directly while creating there objects.

    For example see below code how i created my multi select drop down list.

    @Html.DropDownListFor(model => @Model.arrSelectUsers, new MultiSelectList(Model.ListofUsersDTO, "Value", "Text", @Model.arrSelectUsers),
                                                        new
                                                        {
                                                            id = "_ddlUserList",
                                                            @class = "form-control multiselect-dropdown",
                                                            multiple = "true",
                                                            data_placeholder = "Select Users"
                                                        })
    
    0 讨论(0)
  • 2020-12-13 07:05

    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:

    0 讨论(0)
  • 2020-12-13 07:15

    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.

    0 讨论(0)
提交回复
热议问题