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

ASP.NET MVC多字段共用下拉列表时Details.cshtml无法正确显示人员信息

解决方法

1. 修正实体模型配置

你的主实体(替换为实际类名)目前仅定义了一个LocalResname导航属性,但需要两个独立导航属性分别对应ChiefInvestigatorID和PrincipalInvestID。修改实体类:

public class YourMainEntity // 替换为你的实际实体类名
{
    // 原有属性保留...
    public int? ChiefInvestigatorID { get; set; }
    public int? PrincipalInvestID { get; set; }

    // 添加两个独立导航属性并指定外键
    [ForeignKey("ChiefInvestigatorID")]
    public LocalResname ChiefInvestigator { get; set; }

    [ForeignKey("PrincipalInvestID")]
    public LocalResname PrincipalInvestigator { get; set; }
}

若使用Fluent API配置(更推荐),在DbContext的OnModelCreating方法中添加:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<YourMainEntity>()
        .HasOne(x => x.ChiefInvestigator)
        .WithMany()
        .HasForeignKey(x => x.ChiefInvestigatorID)
        .OnDelete(DeleteBehavior.Restrict);

    modelBuilder.Entity<YourMainEntity>()
        .HasOne(x => x.PrincipalInvestigator)
        .WithMany()
        .HasForeignKey(x => x.PrincipalInvestID)
        .OnDelete(DeleteBehavior.Restrict);
}

2. 修改Details控制器方法,加载双关联实体

在控制器的Details方法中,同时Include两个导航属性确保数据正确加载:

public async Task<IActionResult> Details(int? id)
{
    if (id == null || _context.YourMainEntity == null)
    {
        return NotFound();
    }

    var entity = await _context.YourMainEntity
        .Include(x => x.ChiefInvestigator)
        .Include(x => x.PrincipalInvestigator)
        .FirstOrDefaultAsync(m => m.Id == id); // 替换为你的主键字段

    if (entity == null)
    {
        return NotFound();
    }

    return View(entity);
}

3. 更新Details.cshtml视图,分别显示两个人员信息

首席调查员区域:

<div class="row">
    <div class="col-sm-2">
        <div class="form-group">
            <br />
            <b> @Html.DisplayNameFor(model => model.ChiefInvestigatorID) </b>
            <div class="col-sm-10">
                @Html.DisplayFor(model => model.ChiefInvestigatorID)
            </div>
        </div>
    </div>
    <div class="col-sm-2">
        <div class="form-group">
            <br />
            <b> @Html.DisplayNameFor(model => model.ChiefInvestigator.Title) </b>
            <div class="col-sm-10">
                @Html.DisplayFor(model => model.ChiefInvestigator.Title)
            </div>
        </div>
    </div>
    <div class="col-sm-2">
        <div class="form-group">
            <br />
            <b> @Html.DisplayNameFor(model => model.ChiefInvestigator.Forename) </b>
            <div class="col-sm-10">
                @Html.DisplayFor(model => model.ChiefInvestigator.Forename)
            </div>
        </div>
    </div>
    <div class="col-sm-2">
        <div class="form-group">
            <br />
            <b> @Html.DisplayNameFor(model => model.ChiefInvestigator.Surname) </b>
            <div class="col-sm-10">
                @Html.DisplayFor(model => model.ChiefInvestigator.Surname)
            </div>
        </div>
    </div>
</div>

主要调查员区域:

<div class="row mt-3">
    <div class="col-sm-2">
        <div class="form-group">
            <br />
            <b> @Html.DisplayNameFor(model => model.PrincipalInvestID) </b>
            <div class="col-sm-10">
                @Html.DisplayFor(model => model.PrincipalInvestID)
            </div>
        </div>
    </div>
    <div class="col-sm-2">
        <div class="form-group">
            <br />
            <b> @Html.DisplayNameFor(model => model.PrincipalInvestigator.Title) </b>
            <div class="col-sm-10">
                @Html.DisplayFor(model => model.PrincipalInvestigator.Title)
            </div>
        </div>
    </div>
    <div class="col-sm-2">
        <div class="form-group">
            <br />
            <b> @Html.DisplayNameFor(model => model.PrincipalInvestigator.Forename) </b>
            <div class="col-sm-10">
                @Html.DisplayFor(model => model.PrincipalInvestigator.Forename)
            </div>
        </div>
    </div>
    <div class="col-sm-2">
        <div class="form-group">
            <br />
            <b> @Html.DisplayNameFor(model => model.PrincipalInvestigator.Surname) </b>
            <div class="col-sm-10">
                @Html.DisplayFor(model => model.PrincipalInvestigator.Surname)
            </div>
        </div>
    </div>
</div>

问题根源

之前的模型仅绑定了一个LocalResname导航属性,EF会自动匹配单一外键关联,导致两个字段共用同一人员数据。添加双导航属性并配置对应外键后,EF可正确区分两个关联关系,加载各自对应的人员信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 11:27:23