C # MVC 3 Razor - вызовите DisplayTemplate с DisplayTemplate - PullRequest
0 голосов
/ 21 марта 2012

У меня есть простой список продуктов, продукты делятся на две разные категории и отображаются по-разному на странице в зависимости от их идентификатора категории.

Возможно ли вообще вложить DisplayTemplates одного и того же типа модели, например

//DisplayTemplates/Product.cshtml
@model MyNameSpace.Product


@if (Model.CategoryId == (int)ASixthSenseCore.CategoryId.GiftCards)
{
    @Html.DisplayForModel("GiftCards")
}
else
{
    @Html.DisplayForModel("Merchandise")
}



//DisplayTemplates/GiftCards.cshtml
@model MyNameSpace.Product

<div>I am a Gift Card</div>


//DisplayTemplates/Merchandise.cshtml
@model MyNameSpace.Product

<div>I am Merchandise</div>


//My View
@mode List<MyNameSpace.Product>

@Html.DisplayForModel()

Я пытался сделать это, и он не ломается, но он тоже не работает, шаблон продукта работает должным образом - я добавил отладочный текст, который правильно выводит для каждого соответствующегопункт в списке товаров.Я подозреваю, что в Механизме шаблонов есть какая-то блокирующая фраза, чтобы не допустить его исчезновения на собственной оборотной стороне с рекурсивными вызовами в тот же шаблон, являющийся возможностью этого сценария, сказав, что я подумаю, что это будет удобноспособ работы с несколькими DisplayTemplates для списков без необходимости повторять их с циклом foreach.

1 Ответ

1 голос
/ 21 марта 2012

Ваш код должен работать, если ваши шаблоны не находятся в папке DisplayeTemplates.

Я бы создал отдельные подклассы Product и создал бы шаблоны для них.Это сделает код чище, и вам не придется помещать операторы if везде.

...