Предустановленные элементы выбора.Выбран в Bootstrap Multiselect

#c# #jquery #asp.net-mvc

#c# #jquery #asp.net-mvc

Вопрос:

В моем проекте MVC я использую выпадающий список с Bootstrap Multiselect. У меня есть событие jquery onChange, которое извлекает выбранные элементы из списка и добавляет их в текстовое поле (которое связано со свойством view) для сохранения в поле базы данных. Элементы управления настроены следующим образом :-

             <div class="form-group">
                @Html.LabelFor(model => model.siteNames, htmlAttributes: new { @class = "control-label col-md-4" })
                @Html.ListBox("SiteList", new SelectList(Model.siteList, "value", "text"), new { htmlAttributes = new { @class = "form-control col-md-4" } })
                @Html.TextAreaFor(model => model.siteNames, new { style = "width: 60%; height: 50px", @class = "never-dirty" })
            </div>
  

Я использую jquery для установки выпадающего списка в список с несколькими вариантами выбора следующим образом :-

     $('#SiteList').multiselect({
        maxHeight: 400,
        enableCaseInsensitiveFiltering: true,
        includeSelectAllOption: true,
        onSelectAll: function () {
            $('#siteNames').val("All Sites");
        }
    });
  

Этот бит работает нормально. Сайты являются хранилищами в тестовой области следующим образом :-

1: Сайт 1 2: Сайт 2

и т.д.

При загрузке формы, если model.siteNames уже содержит сайты, я хочу выбрать эти сайты в контроллере, чтобы они уже были выбраны при отображении формы. Это то, что я пытаюсь.

 if (String.IsNullOrEmpty(postModel.siteNames) == false)
    {
        var sites = model.siteNames.Split(nl);
        foreach (var s in sites)
        {
            var siteId = s.Split(':')[0];
            var selected = postModel.siteList.Where(x => x.Value == siteId);
            postModel.siteList.SetSelected(selected);
        }
    }
  

При загрузке формы элементы списка не выбраны. Есть идеи, где я ошибаюсь? Спасибо.

Обновить

Я не смог заставить решение Orvar работать, поэтому я попробовал другой подход. Похоже, что в списке выбора, который я передавал модели, не было никаких фактических выбранных элементов, так что этот код был неправильным.

Теперь я изменил тип списка на MultiSelectList и инициализирую его следующим образом в контроллере :-

  model.siteList = new MultiSelectList(siteList, "value", "text", selectedSiteIDs);
  

где selectedIDs — это список идентификаторов, которые я хочу выбрать, и я убедился, что на этот раз для элементов, перечисленных в selectedIDs, установлено значение selected в siteList.

Однако, на мой взгляд, в элементе управления по-прежнему нет выбранных элементов. Код для элемента управления теперь выглядит следующим образом :-

 <div class="form-group">
    @Html.LabelFor(model => model.siteNames, htmlAttributes: new { @class = "control-label col-md-4" })
    @Html.ListBox("siteList", new SelectList(Model.siteList, "value", "text"), new { htmlAttributes = new { @class = "form-control col-md-4", multiple = "multiple" } })
</div>
  

Может ли быть так, что вызов jquery для multiselect (запрошенный для bootstrap) очищает выбранные элементы?

Ответ №1:

Попробуйте и посмотрите, может ли следующий код помочь:

@Html.ListBoxFor(model => model.SelectedValues, new MultiSelectList(Model.siteList., "value", "text", Model.SelectedValues), "Select Site", new { @class = "chzn-select form-control", multiple = "multiple" })

https://www.codeproject.com/Questions/1194907/Razor-mutliselect-dropdown-set-values-as-selected

Вот хороший источник для множественного выбора в mvc: https://www.mikesdotnetting.com/article/265/asp-net-mvc-dropdownlists-multiple-selection-and-enum-support