Как использовать DisplayTemplates в ядре MVC 2.0

Раньше я использовал 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?


person akd    schedule 29.05.2018    source источник
comment
пользовательский taghelper был бы более предпочтительным способом сделать это в ядре asp.net, displayfor в основном имеет обратную совместимость   -  person Joe Audette    schedule 29.05.2018