DateTime や DateTime? などの比較的単純な型に DisplayTemplates/EditorTemplates を使用してきましたが、これを使用して、ビュー モデルを渡すより複雑な型をレンダリングしたいと考えています。複合型は、基本的に EF のエンティティです。
ビュー モデルは次のようになります。
public class RentalViewModel
{
public Inventory InventoryItem { get; set; }
}
「Inventory.cshtml」という名前の Shared/DisplayTemplates 内にテンプレートを作成しました。こんな感じです(少し外してますが基本的には同じです)
@model MyCompany.MyApp.BusinessObjects.Models.Inventory
<div class="highlightBox">
<ul class="double">
<li>Dimensions:</li>
<li>@Html.DisplayTextFor(i => i.Dimensions)</li>
<li>Capacity</li>
<li>@Html.DisplayTextFor(i => i.Capacity)</li>
</ul>
</div>
ビューの中に、私はこれを持っています:
@Html.DisplayTextFor(i => i.InventoryItem)
ここで DisplayTemplate を解決して使用することを期待していました。しかし、そうではありません。念のため、ビュー モデルに UIHint プロパティを追加しました。
public class RentalViewModel
{
[UIHint("Inventory")]
public Inventory InventoryItem { get; set; }
}
それは違いを生むようには見えませんでした。ここには明らかに何かが欠けていますが、見えません。
レンダリング時に取得するのは、HTML 内の数字「1」だけです。これは、レンダリングしているエンティティの主キーです。
何か案は?この種のことはうまくいくはずですよね?
編集: @Html.DisplayForText(i => i.InventoryItem) から @Html.DisplayFor(i => i.InventoryItem) に変更するだけで問題が解決します。UIHint 属性は必要ありません。