Я использовал DisplayTemplates
в MVC5, чтобы избавиться от foreach
петель из представлений
Если бы у меня были ProductDto
и ProductController
, я бы поставил ProductDto.cshtml
в
Представления / Product / DisplayTemplates /
или
Представления / Shared / 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
Я могу получить только один шаблон, работающий для каждой модели.И templateName, похоже, не оказывает никакого влияния.
Мое тестирование:
Когда 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,"")
--works
@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?