1

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 属性は必要ありません。

4

2 に答える 2

2

それ以外の:

@Html.DisplayTextFor(i => i.InventoryItem)

試す:

@Html.DisplayFor(i => i.InventoryItem, "Inventory")
于 2011-12-23T18:28:38.183 に答える
1

DisplayTextFor はテンプレート レンダリング関数ではありません。DisplayFor、EditorFor、および DisplayForModel と EditorForModel のみが、テンプレートを参照して使用します。

于 2011-12-23T18:58:19.023 に答える