#c# #asp.net #asp.net-core #razor-pages
#c# #asp.net #asp.net-ядро #razor-страницы
Вопрос:
Итак, я пытаюсь создать выпадающий список с несколькими вариантами выбора, и я хочу установить в нем некоторые выбранные значения по умолчанию.
Я получаю значения и сохраняю их в массиве строк, содержащих значения в каждом из них.
Я попытался установить их как 1 строку, и это не сработало, попытался установить их как массив строк, и это тоже не сработало.
Вот код:
<select name="FacultyList" multiple class="sel form-control" asp-for="Faculties"
id="uniFaculties" asp-items="@(new SelectList(facultyList,"Name","Name",@selectedFaculties))">
</select>
facultyList — это список значений, которые я получаю от и api.
selectedFaculties — это массив строк, содержащий выбранные значения.
Примечание: я также использую выбранную библиотеку jQuery, если это имеет значение.
Ответ №1:
Для MultiSelectList
этого можно использовать:
new MultiSelectList(facultyList, "Name", "Name", @selectedFaculties)
Я только что заметил из вашего кода, который вы используете asp-for
на select
. При этом выбранные значения, которые вы передаете либо SelectList
или MultiSelectList
, будут проигнорированы. Причина в том, что ожидается, что выбранные значения будут находиться в Faculties
свойстве, к которому вы привязываетесь. На случай, если вы столкнетесь с этим, вот рабочий пример для вас.
Вид
<select name="FacultyList" multiple class="sel form-control" asp-for="SelectedFaculties"
id="uniFaculties" asp-items="@(new MultiSelectList(Model.AvailableFaculties, "Name", "Name"))">
</select>
Контроллер
public IActionResult Faculty()
{
var vm = new FacultyViewModel
{
AvailableFaculties = new List<Faculty>
{
new Faculty
{
Name = "Arts"
},
new Faculty
{
Name = "Science"
},
new Faculty
{
Name = "Mathematics"
}
},
SelectedFaculties = new List<string> { "Arts", "Mathematics" }
};
return View(vm);
}
Это приведет к выбору Arts
и Mathematics
. Обратите внимание, что выбранные значения поступают из того же свойства, к которому мы привязываем select
asp-for
, и что мы больше не передаем выбранные значения MultiSelectList
напрямую.