Я переношу некоторый код из Asp.net 4.7 в Asp.Net 5 Core. Код использует оператор foreach для перебора записей. Он использует устаревшую функциональность DisplayTemplates, которая сопоставляет типы в папке DisplayTemplates для полиморфного отображения разных HTML-кодов для каждого элемента в зависимости от модели. Все классы являются производными от одного и того же базового класса.
Чтобы заставить его работать правильно в Asp.Net 5 Core, мне пришлось изменить код:
@foreach (var token in Model.TokenGraph)
{
@Html.DisplayFor(t => token)
}
to:
@foreach (var token in Model.TokenGraph)
{
@Html.DisplayFor(t => token, token.GetType().Name)
}
... передавая имя типа.
Никаких проблем, проблем и корректной работы на моей локальной машине.
Проблема в том, что когда я публикую проект на удаленном сервере, используемый по умолчанию шаблон всегда соответствует шаблону базового класса.
Как ни странно, если я вывожу на страницу строку, возвращаемую token.GetType().Name, она соответствует имени производного типа, а не имени базового типа.
Это ошибка в .Net Core 5? Если нет обходного пути, есть ли лучший способ справиться с этим в .Net 5?
[Display(Name="xyz")]
к вашей модели, 2) используйте@Html.DisplayFor(model => model.MyField)
для отображения значения записи и 3) используйте@Html.DisplayNameFor(model => model.MyField)
для отображения имени поля - person paulsm4   schedule 12.04.2021@Html.DisplayNameFor(model => model.MyField)
без второго аргумента и без .GetType().Name? - person paulsm4   schedule 13.04.2021