Я использовал 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; }
}
Это, похоже, не имело значения. Я явно что-то здесь упускаю, но я этого не вижу.
При рендеринге все, что я получаю, это число "1" внутри HTML - это первичный ключ для сущности, которую я рендерим.
Есть идеи? Такого рода вещи должны работать, верно?
РЕДАКТИРОВАТЬ: просто изменение с @ Html.DisplayForText (i => i.InventoryItem) на @ Html.DisplayFor (i => i.InventoryItem) решает проблему. Атрибут UIHint не требуется.