将默认选项添加到 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>
在我的控制器中,我有:
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>