将默认选项添加到 SelectList 不起作用

Prepend default option to SelectList not working

在我的控制器中,我有:

var parentSubjects = new SelectList(_context.Subject, "SubjectId", "SubjectName");
parentSubjects.ToList().Insert(0, new SelectListItem() { Text = "None", Value = "" });

执行第二行时没有任何反应。我希望在列表的第 0 个索引处插入一个空白项。我错过了什么?

当您调用 parentSubjects.ToList() 时,您正在从 parentSubjects 创建列表的新副本并且 Insert 对该副本进行操作。由于您没有保存列表,新项目丢失了。

您可以通过保存 ToList() 创建的列表并使用它来解决此问题:

var parentSubjects = new SelectList(_context.Subject, "SubjectId", "SubjectName").ToList();
parentSubjects.Insert(0, new SelectListItem() { Text = "None", Value = "" });

如果您在视图中使用 asp-items 标签助手,还有一个不同的选项可以避免为您的 blank/default 选项创建 SelectListItem。您可以直接将选项添加到 HTML 那里:

<select asp-for="SelectedSubjects" asp-items="Subjects">
    <!-- simply add the option directly here; the options from
         `asp-items` will be added below -->
    <option value="">None</option>
</select>