1

我一直在将 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 => 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 回答