C# MVC 5详细信息视图不显示外键字段的数据

C# MVC 5详细信息视图不显示外键字段的数据,c#,razor,asp.net-mvc-5,C#,Razor,Asp.net Mvc 5,这是我第一次编写MVC5应用程序和使用C。我已经取得了相当大的进展,并且已经能够排除一些我遇到的错误,但是我在这一点上被难住了 我设置了一些模型和表,包括外键引用。在“我的索引”页面上,每条记录都显示具有以下控制器代码的外键值: 索引控制器 public ActionResult Index(int? filterDwg) { var checkOut = db.CheckOut.Include(c => c.CheckOutStatus).Include(c => c.Dw

这是我第一次编写MVC5应用程序和使用C。我已经取得了相当大的进展,并且已经能够排除一些我遇到的错误,但是我在这一点上被难住了

我设置了一些模型和表,包括外键引用。在“我的索引”页面上,每条记录都显示具有以下控制器代码的外键值:

索引控制器

public ActionResult Index(int? filterDwg)
{
    var checkOut = db.CheckOut.Include(c => c.CheckOutStatus).Include(c => c.DwgList);
    var checkedOut = checkOut.Where(s => s.CheckStatus == (1));

    //Filtering by Drawing
    if (filterDwg != null)
    {
        checkedOut = checkedOut.Where(d => d.DrawingId == (filterDwg));
    }

    return View(checkedOut.ToList());
}
public ActionResult Details(int? id)
{
    if (id == null)
    {
        return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
    }
    CheckOut checkOut = db.CheckOut.Find(id);

    if (checkOut == null)
    {
        return HttpNotFound();
    }


    return View(checkOut);
}
现在,我的详细信息页面,我的控制器如下:

详细信息控制器

public ActionResult Index(int? filterDwg)
{
    var checkOut = db.CheckOut.Include(c => c.CheckOutStatus).Include(c => c.DwgList);
    var checkedOut = checkOut.Where(s => s.CheckStatus == (1));

    //Filtering by Drawing
    if (filterDwg != null)
    {
        checkedOut = checkedOut.Where(d => d.DrawingId == (filterDwg));
    }

    return View(checkedOut.ToList());
}
public ActionResult Details(int? id)
{
    if (id == null)
    {
        return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
    }
    CheckOut checkOut = db.CheckOut.Find(id);

    if (checkOut == null)
    {
        return HttpNotFound();
    }


    return View(checkOut);
}
当我打开以下视图时:

详细信息视图

@model NoDwgASP.Models.CheckOut


@{
    ViewBag.Title = "Details";
}

<h2>Details</h2>

<div>
    <h4>CheckOut</h4>
    <hr />
    <dl class="dl-horizontal">
        <dt>
            @Html.DisplayNameFor(model => model.CheckOutStatus.CheckStatusName)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.CheckOutStatus.CheckStatusName)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.DwgList.DwgNum)
        </dt>

        <dd>

            @Html.DisplayFor(model => model.DwgList.DwgNum)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.UserInitials)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.UserInitials)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.Project)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.Project)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.CheckOutDate)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.CheckOutDate)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.ReturnDate)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.ReturnDate)
        </dd>

    </dl>
</div>
<p>
    @Html.ActionLink("Edit", "Edit", new { id = Model.CheckId }) |
    @Html.ActionLink("Back to List", "Index")
</p>
然而,正如我在索引控制器中所做的那样,我不能简单地将.Include附加到

CheckOut checkOut = db.CheckOut.Find(id);
有人有什么建议吗?我被难住了,我还没有找到任何相关的问题。

如上所述

    public ActionResult Details(int? id)
{
    if (id == null)
    {
        return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
    }
    CheckOut checkOut = db.CheckOut
        .Include(c => c.CheckOutStatus)
        .Include(c => c.DwgList)
        .SingleOrDefault(x => x.CheckId == id);

    if (checkOut == null)
    {
        return HttpNotFound();
    }

    return View(checkOut);
}

您可以使用
db.CheckOut.Include(..).Where(x=>x.ID==ID.FirstOrDefault()(假设
ID
是您的PK字段)谢谢!那起作用了。。。我正在回去回答我自己的问题的路上,因为在我发布了……之后,我有了搜索“合并包含并查找MVC5”的想法。。。。Find方法不支持Include。这可能是因为Find首先尝试查找内存中加载的实体,然后尝试返回数据库,所以您必须使用Stephen建议的Where。