Asp.net Ядро, установите несколько выбранных значений на странице Razor

#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 напрямую.