ForeignKey导航属性值未显示在详细信息和删除视图中

时间:2015-05-11 11:41:24

标签: c# asp.net-mvc

我有两个模型ProjectCategory,其中每个项目都包含多个类别。

Project.cs

public class Project
{
    public int Id { get; set; }

    [Required]
    [Display(Name="Project Name")]
    public string Name { get; set; }

    public ICollection<Category> Categories { get; set; }
}

Category.cs

public class Category
{
    public int Id { get; set; }

    [Required]
    [Display(Name="Category Name")]
    public string Name { get; set; }

    [Required]
    [ForeignKey("Project")]
    public int ProjectId { get; set; }

    public Project Project { get; set; }
}

当我点击一个类别的DetailsDelete(添加一些项目和类别后)链接后的脚手架,项目名称不会显示在两个视图中!只显示标签。它显示在IndexEdit视图中。可能是什么原因?

修改

这是Details动作

    public ActionResult Details(int? id)
    {
        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
        Category category = db.Categories.Find(id);
        if (category == null)
        {
            return HttpNotFound();
        }
        return View(category);
    }

当我在返回var pro = category.Project之前添加一行View(category)并开始调试时,pro变量设置为null。在Index操作中,项目明确包含db.Categories.Include(c => c.Project).ToList(),但不包含在Details中。我需要明确包含它吗?如果是,怎么样?

1 个答案:

答案 0 :(得分:0)

您可以将导航设置为虚拟(延迟加载)

public virtual Project Project { get;set; }

或者您可以使用Include方法(不需要虚拟关键字)

来使用预先加载
Category category = db.Categories.Include(c => c.Project).FirstOrDefault(c => c.Id == id);

MSDN Documentation