首页 > 解决方案 > Asp.net Core,在 Razor Page 中设置多个选中的值

问题描述

所以,我正在尝试创建一个多选下拉列表,并且我想在其中设置一些默认选择值。
我得到这些值并将它们存储在一个包含每个值的字符串数组中。
我尝试将它们设置为 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是一个包含所选值的字符串数组。

注意:我也在使用 Chosen jQuery 库,如果这有所作为的话。

标签: c#asp.netasp.net-corerazor-pages

解决方案


MultiSelectList您可以为此使用一个:

new MultiSelectList(facultyList, "Name", "Name", @selectedFaculties)

我刚刚从您的代码中注意到您asp-forselect. 这样做时,您传递给SelectListMultiSelectList将被忽略的选定值。原因是因为它期望选定的值位于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);
}

这将选择ArtsMathematics。请注意,选择的值来自我们绑定select到 using的同一属性asp-for,并且我们不再将选择的值MultiSelectList直接传递给。


推荐阅读