SelectList не загружает выбранное или значение по умолчанию при загрузке представления - PullRequest
0 голосов
/ 04 ноября 2019

У меня есть вид, который не отображает выбранное значение / значение по умолчанию для страницы редактирования. Я установил идентификатор, добавил точку останова и вижу, что в списке выбора установлено значение true для правильного идентификатора члена, но это не отражается в моем представлении, что мне не хватает?

Если я установил selectedValue в жестко закодированное значение, я получу тот же результат.

Контроллер

[HttpGet]
public IActionResult EditMember(Guid? id)
{
    var titleId = _context.Members.Where(x => x.RowId == id).Select(y => y.TitleId).FirstOrDefault();
    var editMember = new MemberViewModel
    {
        Titles = new SelectList(_context.Title, nameof(Title.TitleId), nameof(Title.TitleName), titleId).ToList(),
    };
    return View(editMember);
}

VM

public string TitleName { get; set; }
public int TitleId { get; set; }
public List<SelectListItem> Titles { get; set; }

Просмотр

<label asp-for="TitleId" class="col-2 col-form-label"></label>
<div class="col-10">
    <select asp-for="TitleId" class="form-control w-25" asp-items="Model.Titles"></select>
    <span asp-validation-for="TitleId" class="text-danger small"></span>
</div>

Ответы [ 2 ]

0 голосов
/ 04 ноября 2019

Да, это расстроено тем, что выбранный элемент работает со старыми выпадающими списками Html-helper, но не с select

  1. Вы можете установить выбранный элемент в select, только если вы не привязываетесь кмодель

    <select asp-items="Model.Titles" name="TitleId"></select>

    Затем вы можете привязать «TitleId» на сервере после отправки формы

  2. Если вы оставите привязку вашей модели, вам нужноудалить "asp-items" и заполнить ваш список вручную.

<select asp-for="TitleId">
   <option selected disabled>Titles</option>    
   @foreach (var title in Model.Titles)
   {
     <option value="@title.Value" selected="@title.Selected">@title.Text</option>
   }
</select>

Таким образом, вы выбрали свой предмет из модели

0 голосов
/ 04 ноября 2019

Вы хотите передать свой список в viewmodel и установить выбранное свойство на конкретное, например, в вашем контроллере (при условии, что у вас есть объект типа Titles):

    public IActionResult EditMember(Guid? id)
    {
        var titleId = _context.Members.Where(x => x.RowId == id).Select(y => y.TitleId).FirstOrDefault();
        var editMember = new MemberViewModel
        {
            Titles =  _context.Titles.Select(g => new SelectListItem
            {
                Value = g.ToString(),
                Text = g.ToString(),
                Selected = (g == titleId)
            }).ToList();
        };
        return View(editMember);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...