.NET MVC MultiSelectList и выбранные значения - PullRequest
7 голосов
/ 03 марта 2010

Я пытаюсь установить выбранные значения для MultiSelectList, но на странице не отображаются никакие выбранные значения. Я попробовал все практические способы сделать это и все еще получить те же результаты. В настоящее время я пытаюсь передать список выбранных объектов через конструктор. Что меня привлекает, так это то, что при проверке объекта MultiSelectList свойство selectedvalues ​​содержит элементы, которые я передал в него с помощью конструктора, но он по-прежнему не отображается.

Я заметил, что у многих людей такая же проблема, но я не видел ответа, который бы сработал для меня. Я попытался перебрать список и установить для выбранного свойства значение true, я попытался создать множественный список с нуля и установить для каждого отдельного элемента выбранное свойство, и я попытался с помощью конструктора. Ни один из них не сработал. Я также нашел предположение, что свойство MultiSelectList не может быть названо так же, как элемент управления (который я пробовал), и это не сработало. Почему так сложно создать выпадающий список с выбранными значениями, используя эту платформу? Я что-то упустил?

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

Редактировать 1

Это происходит, когда я создаю экземпляр MultiSelectList. Если я осматриваю объект в представлении и открываю представление результатов, я вижу, что «Аляска» не выбрана, когда я знаю, что так и должно быть.

http://imgur.com/eTIdH.jpg

Я создаю такие экземпляры.

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

GenericDataContract - это просто класс с двумя свойствами: Code и Description. Первый список - это все состояния, второй список - мои выбранные состояния.

Ответы [ 3 ]

8 голосов
/ 04 марта 2010

Грррррр, я нашел это. По-видимому, выбранные элементы могут быть только списком строк. Как только я изменил свой код, чтобы передать его, он выбрал значения.

4 голосов
/ 19 декабря 2012

Хорошо, этот действительно смутил меня, но я думаю, я понял это.

Проблема У меня было отображение MultiSelectList с выбранными значениями по умолчанию, заключающееся в том, что я использовал @Html.DropDownListFor(...) для отображения списка множественного выбора вместо @Html.ListBoxFor(...). Смущает то, что DropDownListFor будет отображать список с множественным выбором, если вы укажете атрибуты HTML, чтобы заставить его сделать это, но значения по умолчанию не будут работать , потому что он предназначен только для один по умолчанию - поэтому для не будут выбраны значения по умолчанию:

List<string> myStrings;
myStrings = new List<string>();
myStrings.Add("aaa");
myStrings.Add("bbb");
myStrings.Add("ccc");

ViewData["MyStringsDropdown"] = new MultiSelectList(
    myStrings.Select(abc => new { StringId = abc, Title = abc + "Title" }),
    "StringId",
    "Title",
    myStrings.Where(str => str == "aaa" || str == "ccc").ToList()
);

...

@Html.DropDownListFor(model => model.MyStrings, (MultiSelectList)ViewData["MyStringsDropdown"], new { size = "10", multiple = "multiple" })

Тем не менее, следующие будут отображать значения по умолчанию "aaa" и "ccc", как выбрано:

@Html.ListBoxFor(model => model.MyStrings, (MultiSelectList)ViewData["MyStringsDropdown"], new { size = "10", multiple = "multiple" })

Но вот настоящий кикер; ASP.NET иногда кажется кеш тип элемента управления, поэтому вы можете заменить DropDownListFor на ListBoxFor, и он по-прежнему не будет предварительно выбирать любые значения по умолчанию , пока вы не перезапустите IIS работника процесс . Я нахожу это действительно странным, и это на некоторое время бросило меня.

1 голос
/ 03 марта 2010

Я считаю, что он вытягивает выбранные предметы из модели, а не из списка предметов. Убедитесь, что ваше свойство модели StatesOfPractice заполнено элементами, которые вы хотите выбрать. То есть свойство модели StatesOfPracticeList предоставляет набор элементов, используемых для заполнения списка. Свойство модели StatesOfPractice, которое будет набором выбранных значений свойств при публикации формы, также должно содержать выбранные по умолчанию значения при визуализации представления. Под капотом он использует метод HtmlHelper GetModelStateValue, чтобы найти выбранные значения для любого списка выбора. Я предполагаю, что это сделано для того, чтобы легче было поддерживать выбранные значения, когда есть ошибка проверки и форма перерисовывается с ошибками состояния модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...