You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core中如何在Edit动作中显示带选中值的下拉列表?

解决方案

1. 修正控制器代码

你当前的问题有两个核心:

  • SelectList未指定值字段和显示文本字段,导致下拉框展示对象的类名而非项目名称
  • 数据源错误地只取了当前缺陷对应的单个项目,下拉框应该展示所有可选项目,再选中当前项

修改后的控制器代码:

public IActionResult Edit(int id)
{
    // 获取当前要编辑的缺陷实体
    var defect = db.Defects.Find(id);
    if (defect == null)
    {
        return NotFound();
    }

    // 从Projects表获取所有可选项目(如果没有单独的Projects表,可改为从Defects中去重获取项目列表)
    var allProjects = db.Projects.Select(p => new { p.ProjectId, p.ProjectName }).ToList();
    
    // 创建SelectList:指定数据源、值字段、显示文本字段、默认选中值
    ViewBag.ProjectList = new SelectList(allProjects, "ProjectId", "ProjectName", defect.ProjectId);
    
    return View(defect);
}

2. 修正视图代码

需要用asp-for绑定模型的ProjectId属性,这样框架会自动匹配SelectList中的选中值,同时asp-items指向我们修正后的ViewBag集合:

<select asp-for="ProjectId" asp-items="@ViewBag.ProjectList" class="form-control">
    <option value="">请选择项目</option> <!-- 可选:添加默认提示项 -->
</select>

关键说明

  • SelectList的四个参数:数据源、Value字段名、Text字段名、选中值,这四个参数缺一不可,才能正确生成带选中状态的下拉选项
  • asp-for必须绑定模型的值类型属性(比如ProjectId),而不是ProjectName,这样才能和SelectList的Value字段匹配,实现自动选中
  • 如果没有单独的Projects表,可将获取数据源的代码改为:
    var allProjects = db.Defects
                        .Select(d => new { d.ProjectId, d.ProjectName })
                        .Distinct()
                        .ToList();
    

内容的提问来源于stack exchange,提问作者Rezo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 14:26:26