Предварительно добавить параметр по умолчанию, чтобы SelectList не работал - PullRequest
0 голосов
/ 26 апреля 2020

В моем контроллере у меня есть:

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

Ничего не происходит при выполнении 2-й строки. Я ожидаю, что пустой элемент будет вставлен в 0-й индекс в списке. Чего мне не хватает?

1 Ответ

3 голосов
/ 26 апреля 2020

Когда вы звоните parentSubjects.ToList(), вы создаете новую копию списка из parentSubjects, и Insert работает с этой копией. Поскольку вы не сохранили список, новый элемент теряется.

Это можно исправить, сохранив список, созданный с помощью ToList() и использовав его:

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

Если вы вы используете вспомогательный тег asp-items в вашем представлении, есть также другая опция, которая позволит вам не создавать 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>
...