首页 > 解决方案 > 加载视图时选择列表未加载选定值或默认值

问题描述

我有一个视图,它没有显示编辑页面的选定/默认值。我已经设置了 id,我添加了一个断点,我可以看到选择列表已为正确的成员 id 选择设置为 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);
}

虚拟机

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>

标签: c#asp.netasp.net-mvcasp.net-corerazor

解决方案


您想在视图模型中传递您的列表并在特定的属性上设置选定的属性,例如在您的控制器中(假设您有一个像 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);
    }

推荐阅读