Asp.net mvc 3 为什么不是';ASP.NET MVC 3解析复杂类型的显示模板?

Asp.net mvc 3 为什么不是';ASP.NET MVC 3解析复杂类型的显示模板?,asp.net-mvc-3,display-templates,Asp.net Mvc 3,Display Templates,我一直在使用DisplayTemplates/EditorTemplates来处理相对简单的类型,如DateTime和DateTime?等。现在我想用它来呈现一个更复杂的类型,该类型正在转换我的视图模型。复杂类型基本上是来自EF的实体 视图模型如下所示: public class RentalViewModel { public Inventory InventoryItem { get; set; } } 我在Shared/DisplayTemplates中创建了一个名为“Inven

我一直在使用DisplayTemplates/EditorTemplates来处理相对简单的类型,如DateTime和DateTime?等。现在我想用它来呈现一个更复杂的类型,该类型正在转换我的视图模型。复杂类型基本上是来自EF的实体

视图模型如下所示:

public class RentalViewModel
{
    public Inventory InventoryItem { get; set; }
}
我在Shared/DisplayTemplates中创建了一个名为“Inventory.cshtml”的模板。看起来是这样的(我去掉了一点,但本质上是一样的)

我希望它在这里解析我的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属性。

而不是:

@Html.DisplayTextFor(i => i.InventoryItem)
尝试:


DisplayTextFor不是模板呈现函数。只有DisplayFor、EditorFor和DisplayForModel以及EditorForModel将查看和使用您的模板。

这似乎只是部分正确。对于DateTime模板DisplayTextForWorksOK(即单个属性)之类的内容。但对于其他更复杂的事情,你是对的。谢谢
public class RentalViewModel
{
    [UIHint("Inventory")]
    public Inventory InventoryItem { get; set; }
}
@Html.DisplayTextFor(i => i.InventoryItem)
@Html.DisplayFor(i => i.InventoryItem, "Inventory")