我一直在将 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 属性。