2011-12-23 12 views
1

私はDisplayTemplates/EditorTemplatesを比較的単純な型(DateTimeやDateTimeなど)で使っています。今では、これを使ってより複雑な型をレンダリングして、ビューモデルを渡したいと考えています。複合型は、基本的にEFのエンティティです。ASP.NET MVC 3が複雑なタイプのDisplayTemplateを解決できないのはなぜですか?

ビューモデルは、次のようになります

public class RentalViewModel 
{ 
    public Inventory InventoryItem { get; set; } 
} 

私は「Inventory.cshtml」という名前の共有/ DisplayTemplatesの内側にテンプレートを作成しました。

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

が、私はここに私のDisplayTemplateを解決することを期待していた:それは、私はこれを持って、(私は少しを削除したが、それは本質的には同じです)ビューの内部

@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> 

次のようになりますそれを使用してください。しかし、それはしません。私は念のために、私の見解モデルにUIHintプロパティを追加しました:違いを確認していないようでした

public class RentalViewModel 
{ 
    [UIHint("Inventory")] 
    public Inventory InventoryItem { get; set; } 
} 

。私は明らかにここに何かを見逃しているが、私はそれを見ていない。

レンダリング時には、HTMLの内部で数字「1」が得られます。これはレンダリングするエンティティの主キーです。

アイデア?この種のものはうまくいくはずですよね?

EDIT:@ Html.DisplayForText(i => i.InventoryItem)から@ Html.DisplayFor(i => i.InventoryItem)に変更すると、問題が修正されます。 UIHint属性は必要ありません。

答えて

2

の代わりに:

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

試してみてください。

@Html.DisplayFor(i => i.InventoryItem, "Inventory") 
+0

これはうまくいくようです。ありがとう。 –

1

DisplayTextForがないテンプレートのレンダリング機能です。 DisplayFor、EditorFor、DisplayForModel、EditorForModelのみがテンプレートを調べて使用します。

+0

それは部分的にしか真実ではないようです。 DateTimeテンプレートのようなものの場合、DisplayTextForはOK(つまり、単一のプロパティ)として機能します。しかし、もっと複雑なものは正しいものです。ありがとう。 –

関連する問題