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

ASP.NET MVC如何在下拉列表显示关联表名称而非ID供用户选择

错误根源

你的运行时报错由两个基础属性匹配问题导致:

  1. C#大小写敏感,User模型中定义的职位导航属性为小写开头的designation,视图中调用时写为大写开头的Designation,框架找不到对应属性触发异常
  2. Designation模型中存储职位名称的属性为DesignationName,你视图中调用的Name属性不存在
  3. 额外的无效代码:User模型中自引用的public User user { get; set; }无业务意义,控制器中Include(us => us.user)属于无效关联加载,可能引发额外的查询异常

修复方案

1. 调整控制器代码

如果你需要实现注册页职位下拉选择,需要提前将所有职位数据加载后传递到视图:

public class HomeController : Controller
{
    private CompanyPrintersEntities db = new CompanyPrintersEntities();

    // 注册页Action
    public ActionResult Register()
    {  
        // 构造下拉选项:值存职位ID,文本存职位名称
        ViewBag.DesignationOptions = new SelectList(db.Designations.ToList(), "DesignationID", "DesignationName");
        // 给视图传空的User对象做表单绑定
        return View(new User());
    }

    // 如果是用户列表展示页,调整原有Index方法
    public ActionResult Index()
    {  
        // 去掉无效的自引用Include
        return View(db.Users.Include(us => us.designation).ToList());
    }
}

2. 视图代码调整

场景一:注册页职位下拉选择(你核心需要的功能)

直接使用强类型绑定生成下拉列表,自动展示职位名称,提交时自动绑定选中的DesignationID:

@model User

<div class="form-group">
    @Html.LabelFor(model => model.DesignationID, htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-10">
        @Html.DropDownListFor(model => model.DesignationID, (SelectList)ViewBag.DesignationOptions, "请选择职位", new { @class = "form-control" })
        @Html.ValidationMessageFor(model => model.DesignationID, "", new { @class = "text-danger" })
    </div>
</div>

场景二:用户列表页展示对应职位名称

修正属性名的大小写和命名即可:

@model List<User>

<div class="form-group">
    <label class="control-label col-md-2">用户职位列表</label>
    <div class="col-md-10">
        @foreach (User item in Model)
        {
            <p>用户 @item.FirstName @item.LastName 所属职位:@item.designation.DesignationName</p>
        }
    </div>
</div>

额外注意(DB First模式)

如果你的模型是EF自动生成的,不要直接修改自动生成的partial类文件,新增一个同名的partial类存放自定义逻辑,避免后续从数据库更新模型时把修改覆盖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:00:03