Я работаю с viewbag на C # и хочу показать некоторые цвета в теге <select> на моей HTML-странице.

Это моя модель на c #

public class CoreColorGroup
{
   [Key]
   public long CORECOLORGROUPID { get; set; }

   [MaxLength(100)]
   public string NAME { get; set; }
}

В моем контроллере я запрашиваю панель просмотра следующим образом:

ViewBag.colorlist = await _context
                            .DbSet<CoreColorGroup>()
                            .Query.OrderBy(x => x.CORECOLORGROUPID)
                            .Select(x => new SelectListItem(x.CORECOLORGROUPID.ToString(), x.NAME))
                            .ToListAsync();

Панель просмотра работает хорошо. Я отлаживаю свое приложение и получаю цвета через контроллер.

И это мой тег выбора:

<div class="form-group">
    <label asp-for="CoreColorGroup" class="control-label"></label>
    <select asp-for="CORECOLORGROUPID" asp-items="@ViewBag.colorlist" class="form-control"></select>
</div>

Когда я запускаю приложение, раскрывающееся меню содержит первичные ключи вместо названия цветов.

Как я могу показать названия цветов вместо первичных ключей ?

1
Fearcoder 24 Окт 2019 в 12:38

1 ответ

Лучший ответ

Вы неправильно инициализируете SelectListItem, SelectListItem не имеет конструктор, который принимает 2 аргумента.

Задайте свойства Value и Text и используйте синтаксис инициализатора объекта при создании SelectListItem:

.Select(x => new SelectListItem() { Text = x.NAME, Value = x.CORECOLORGROUPID.ToString()})
2
haldo 24 Окт 2019 в 13:05