私は以下のモデルを持っています:
public class Car
{
public int Id { get; set; }
public string Colour { get; set; }
public Category Category { get; set; }
}
public class Category
{
public int CatId { get; set; }
public string Name { get; set; }
}
以下のように表示するモデルを返します。
public ActionResult Index()
{
var car = new Car { Id = 1, Colour = "Black", Category = new Category { CatId = 2, Name = "Audi" } };
return View(car);
}
私の見解は:
@model MvcApplication6.Models.Car
@{
ViewBag.Title = "Car";
}
@Html.DisplayForModel()
これはカテゴリを表示していません。これは MVC のバグであることがわかりました。回避策として、Object.ascx displaytemplate をオーバーライドする必要があります。
そこで、Views/Shared/DisplayTemplates/ フォルダーに object.cshtml を追加しました。コードは以下のとおりです。
@functions{
public bool ShouldShow(ModelMetadata metadata)
{
//return number % 2 == 0 ? true : false;
return metadata.ShowForDisplay
&& metadata.ModelType != typeof(System.Data.EntityState)
&& !metadata.IsComplexType
&& !ViewData.TemplateInfo.Visited(metadata);
}
}
@if (Model == null) {
@(ViewData.ModelMetadata.NullDisplayText)
} else if (ViewData.TemplateInfo.TemplateDepth > 1) {
@(ViewData.ModelMetadata.SimpleDisplayText)
} else {
foreach (var prop in ViewData.ModelMetadata.Properties.Where(pm => ShouldShow(pm))) {
if (prop.HideSurroundingHtml) {
@(Html.Display(prop.PropertyName))
} else {
if (!String.IsNullOrEmpty(prop.GetDisplayName())) {
<div class="display-label">@(prop.GetDisplayName())</div>
}
<div class="display-field">@(Html.Display(prop.PropertyName))</div>
}
}
}
しかし、まだカテゴリが表示されていません。