Раньше я использовал DisplayTemplates
в MVC5, чтобы избавиться от циклов foreach
из представлений.
Если у меня есть ProductDto
и ProductController
Я бы поставил ProductDto.cshtml
под
Представления/Продукт/DisplayTemplates/
or
Представления/Общие/DisplayTemplates/
чтобы использовать шаблон для списка продуктов: я бы заменил циклы foreach
следующей строкой, чтобы перечислить все продукты с помощью шаблона: @Html.DisplayFor(m=>m.Products);
И если я хочу использовать ту же модель (ProductDto
) в другом шаблоне отображения, например, скажем, ProductDtoPrintView
, тогда я создам другой шаблон под Views/Product/DisplayTemplates/
с именем ProductDtoPrintView.cshtml
и передам templateName
как @Html.DisplayFor(m=>m.Products,"ProductDtoPrintView")
.
Но это не работает в MVC Core 2.0.
Я могу заставить работать только один шаблон для каждой модели. И имя_шаблона, похоже, вообще не имеет никакого значения.
Мое тестирование:
Когда ProductDto.cshtml
помещается под Views/Product/DisplayTemplates/
Если у меня есть только один шаблон отображения для модели ProductDto
, то templateName
действительно не оказывает никакого влияния. Работает с любым именем или без имени.
@Html.DisplayFor(x =>x.Products)
-- работает @Html.DisplayFor(x =>x.Products,"")
-- работает @Html.DisplayFor(x =>x.Products,"whatever")
-- работает
Но когда я добавляю другой шаблон отображения для той же модели, что и ProductDtoPrintView.cshtml
Тогда дело немного портится.
@Html.DisplayFor(x =>x.Products)
--работает
@Html.DisplayFor(x =>x.Products,"")
--работает
@Html.DisplayFor(x =>x.Products,"")
--работает
@Html.DisplayFor(x =>x.Product, "ProductDtoPrintView")
--не работает 500 внутренняя ошибка сервера.
@Html.DisplayFor(x =>x.Products, "ProductDto")
--не работает - ошибка 500
@Html.DisplayFor(x =>x.Products, "DisplayTemplates/ProductDto")
--работает и возвращает шаблон ProductDto.cshtml
@Html.DisplayFor(x =>x.Products, "DisplayTemplates/ProductDtoWhatever")
--работает и возвращает шаблон ProductDto.cshtml
@Html.DisplayFor(x =>x.Products, "DisplayTemplates/ProductDtoPrintView")
--работает и возвращает шаблон ProductDto.cshtml
В принципе, я не могу заставить ProductDtoPrintView работать, если только я не удалю файл ProductDto.cshtml
.
Кто-нибудь испытывает ту же проблему? и насколько точно эти DisplayTemplates должны работать в MVC Core?