加载视图时,SelectList未加载所选内容或默认值

时间:2019-11-04 13:27:30

标签: c# asp.net asp.net-mvc asp.net-core razor

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

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 :(得分:0)

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

答案 1 :(得分:0)

是的,选择的项目无法与旧的Html-helper-dropdown一起使用但与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>

通过这种方式,您可以从模型中选择商品