为什么ASP.NET MVC 3不能解析复杂类型的DisplayTemplate?

时间:2011-12-23 18:21:01

标签: asp.net-mvc-3 display-templates

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

视图模型如下所示:

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

我在Shared / DisplayTemplates中创建了一个名为“Inventory.cshtml”的模板。它看起来像这样(我已经删除了一点,但它基本上是相同的)

@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 =&gt; i.InventoryItem)更改为@ Html.DisplayFor(i =&gt; i.InventoryItem)即可解决问题。不需要UIHint属性。

2 个答案:

答案 0 :(得分:2)

而不是:

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

尝试:

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

答案 1 :(得分:1)

DisplayTextFor不是模板渲染功能。只有DisplayFor,EditorFor,DisplayForModel和EditorForModel才会查看并使用您的模板。