Как показать несколько полей в раскрывающемся списке ViewBag для asp-элементов в asp.net-mvc-core - PullRequest
0 голосов
/ 03 января 2019

Модель

 public partial class Official
    {
        public short OfficialNo { get; set; }
        public string Surname { get; set; }
        public string Firstname { get; set; }
    }

У меня есть 2 частичных ответа, но ни один из них не дает мне того, что я хочу:

В моем контроллере на Edit:

ViewBag.OfficialNo = новый список выбора (_context.Official, "OfficialNo", "OfficialNo", "", "фамилия"); Это дает мне

    Smith
    111
    Brown
    102
    Gray
    103

Верхняя строка выделена жирным шрифтом и происходит от "Фамилии", которая должна быть полем группы данных. Суть в том, что хранится в базе данных и отображает значение, если оно есть (что правильно).

С другой стороны

ViewBag.OfficialNo = новый список выбора (_context.Official.Select (e => e.OfficialNo + "-" + e.Firstname + "" + e.Sameame));

Это дает мне

    101 – John Smith
    102 – Bob Brown
    103 – Garry Gray

, которая является информацией, которую я хочу, но не позволяет сохранить выбор (естественно).

хочу

    John Smith
    111
    Bob Brown
    102
    Garry Gray
    103

, так что первая строка - это информация, а вторая строка (если выбрана) - это то, что сохраняется при обновлении.

Как мне объединить 2 оператора ViewBag выше?

Для получения дополнительной информации, мой оператор Edit View:

<div class="form-group">
    <label asp-for="RefereeNo" class="control-label"></label>
    <select asp-for="RefereeNo" class="form-control" asp-items="ViewBag.OfficialNo"><option>   </option></select>
</div>

Ответы [ 2 ]

0 голосов
/ 07 января 2019

Согласно ответу Нань Юй выше:

Контроллер:

var officials = _context.Official.GroupBy(x => x.Firstname+" "+x.Surname);

List<SelectListItem> selectListItems = new List<SelectListItem>();

foreach (var official in officials)
{
    var optionGroup = new SelectListGroup() { Name = official.Key };
    foreach (var item in official)
    {
        selectListItems.Add(new SelectListItem() { Value = item.OfficialNo.ToString(), Text = item.OfficialNo.ToString(), Group = optionGroup });
    }
}

ViewBag.OfficialNo = selectListItems;
0 голосов
/ 04 января 2019

Одним из решений является добавление группового свойства SelectListItem:

Контроллер:

var officials = _context.Official.GroupBy(x => x.Firstname+" "+x.Surname);

List<SelectListItem> selectListItems = new List<SelectListItem>();

foreach (var official in officials)
{
    var optionGroup = new SelectListGroup() { Name = official.Key };
    foreach (var item in official)
    {
        selectListItems.Add(new SelectListItem() { Value = item.OfficialNo.ToString(), Text = item.OfficialNo.ToString(), Group = optionGroup });
    }
}

ViewBag.OfficialNo = selectListItems;

Затем в представлении показать / связать выпадающий список:

<div class="form-group">
    <label asp-for="@item.RefereeNo" class="control-label"></label>
    <select asp-for="@item.RefereeNo" class="form-control" asp-items="ViewBag.OfficialNo"><option>   </option></select>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...