#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