所以我有一个MVC应用程序来管理网站列表,在我的详细信息视图中,我的模型中没有任何子类呈现任何内容,即使@ Html.DisplayNameFor正确呈现标签。
以下是正常运行的视图代码:
<tr>
<td>
<span class="label label-info">@Html.DisplayNameFor(model => model.SiteName)</span>
</td>
<td style="text-align: center;">
@Html.DisplayFor(model => model.SiteName)
</td>
</tr>
这是DisplayFor不生成任何内容的代码:
<tr>
<td>
<span class="label label-info">@Html.DisplayNameFor(model => model.Version.VersionName)</span>
</td>
<td style="text-align: center;">
@Html.DisplayFor(model => model.Version.VersionName)
</td>
</tr>
这是我的网站模型:
public class Site
{
public int ID { get; set; }
[Required]
[Display(Name = "Link")]
[DataType(DataType.Url)]
public string SiteLink { get; set; }
[Required]
[Display(Name = "Name")]
public string SiteName { get; set; }
public int VersionId { get; set; }
[ForeignKey("VersionId")]
public Version Version { get; set; }
}
我的版本类:
public class Version
{
public int ID { get; set; }
[Display(Name = "Version")]
public string VersionName { get; set; }
public List<Site> Sites { get; set; }
}
最后,这是我的控制器中的Details ActionResult方法:
public ActionResult Details(int id = 0)
{
Site site = db.Sites.Find(id);
if (site == null)
{
return HttpNotFound();
}
return View(site);
}
我的所有其他视图都渲染得很好,只是这个详细信息视图似乎没有为我的自定义类返回任何内容。
答案 0 :(得分:3)
您需要显式加载子(版本):
Site site = db.Sites.Find(id);
if (site == null)
{
return HttpNotFound();
}
db.Entry(site).Reference(p => p.Version).Load();
return View(site);
您也可以
db.Sites.Include(s => s.Version).FirstOrDefault(s => s.Id == id);
https://msdn.microsoft.com/en-us/data/jj574232.aspx#explicit