【问题标题】:SelectList not loading selected or default value when loading view加载视图时选择列表未加载选定值或默认值
【发布时间】:2019-11-04 13:27:30
【问题描述】:

我的视图没有显示编辑页面的选定/默认值。我已经设置了 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.net asp.net-mvc asp.net-core razor


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      很遗憾,所选项目正在使用旧的 Html-helper-dropdown,但不能与 select 一起使用

      1. 只有在没有绑定到模型的情况下,才能在 select 中设置选定项

        &lt;select asp-items="Model.Titles" name="TitleId"&gt;&lt;/select&gt;

        然后你可以在提交表单后在服务器上绑定“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>
      

      这样你就可以从模型中选择你的项目

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-12
        • 1970-01-01
        • 2022-11-10
        • 1970-01-01
        相关资源
        最近更新 更多