我一直在使用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属性。
答案 0 :(得分:2)
而不是:
@Html.DisplayTextFor(i => i.InventoryItem)
尝试:
@Html.DisplayFor(i => i.InventoryItem, "Inventory")
答案 1 :(得分:1)
DisplayTextFor不是模板渲染功能。只有DisplayFor,EditorFor,DisplayForModel和EditorForModel才会查看并使用您的模板。