Search code examples
asp.net-mvcmulti-selectselected

.NET MVC MultiSelectList and selected values


I am trying to set the selected values for a MultiSelectList but the page does not display any values as selected. I have tried every practical way to do this and still get the same results. I am currently trying to pass a list of selected objects in via the constructor. What gets me is that when I inspect MultiSelectList object, the selectedvalues property contains the items that I have passed into it using the constructor but it still does not display.

I have noticed that many people are having the same problem but I have not seen an answer that has worked for me. I have tried iterating through the list and setting the selected property to true, I have tried creating the multiselectlist from scratch and setting each individual items selected property and I have tried using the constructor. None of these have worked. I also found an a suggestion that the MultiSelectList property could not be named the same as the control (which I tried) and that did not work. Why is it so difficult to create a dropdown list with selected values using this framework? Am I missing something?

<label for="StatesOfPractice">States of Practice:</label>
                    <br />
                    <%= Html.ListBox("StatesOfPractice", Model.StatesOfPracticeList)%>
                    <br />
                    <%= Html.ValidationMessage("StatesOfPractice")%>

Edit 1

It appears to be happening when I instantiate the MultiSelectList. If I inspect the object in the View and open the Results View I can see that "Alaska" is not selected when I know that it should be.

https://i.sstatic.net/QEEKx.jpg

I am instantiating like this.

new MultiSelectList(List<GenericDataContract>, "Code", "Description", List<GenericDataContract>);

The GenericDataContract is simply a class with two properties, Code and Description. The first List is all of the states, the second List is my selected states.


Solution

  • I believe that it pulls the selected items from the model, not from the list of items. Make sure that your StatesOfPractice model property is populated with the items that you want selected. That is, the StatesOfPracticeList model property provides the set of items used to populate the list. The model property StatesOfPractice which will be the set of selected property values when the form is posted, should also contain the default selected values when the view is rendered. Under the hood it uses the HtmlHelper GetModelStateValue method to find the selected value(s) for any select list. I presume this is done so that it is simpler to maintain the selected values when there is a validation error and the form is rerendered with the model state errors.