У нас есть два действия, каждое из которых имеет свой собственный вид, и у каждого есть своя папка для шаблонов отображения:
- / Контроллеры
- Action1Controller.cs
- Action2Controller.cs
- / Просмотров
- Action1
- Index.cshtml
- DisplayTemplates
- Vehicle.cshtml
- Car.cshtml
- Мотор2
- Index.cshtml
- DisplayTemplates
- Vehicle.cshtml
- 2DoorCar.cshtml
Предположим, что иерархия наследования модели 2DoorCar : Car : Vehicle
.
Мы используем Sitecore, который использует макет страницы на основе компонентов и приводит к выполнению нескольких действий в одном запросе. К сожалению, это вызывает странный сценарий, который я не могу понять, как решить.
* +1047 * Пример * +1048 *
- Загрузите Page1, на которой есть два компонента: Action1Component и Action2Component.
- MVC выполняет Action1Component и передает модель
2DoorCar
в представление для визуализации.
- ASP.NET разрешает шаблон отображения
/Views/Action1/DisplayTemplates/Car.cshtml
, опираясь на базовые классы модели.
За кулисами: ASP.NET MVC заполняет словарь "ActionCache
" с именами базовых классов в качестве ключа и представлением в качестве значения. В результате шаблоны отображения Action1 кэшируются для будущих попаданий в кэш .
- MVC выполняет Action2Component и передает ту же модель
2DoorCar
представлению для рендеринга.
- На этот раз
ActionCache
используется для поиска правильного шаблона отображения, и ASP.NET пытается отобразить страницу, используя шаблон отображения /Views/Action2/DisplayTemplates/Car.cshtml
, который не существует (он должен был использовать 2DoorCar.cshtml
, но не не знаю его искать).
Что я пробовал
- Я пытался очистить кеш между каждым выполнением действия, но метод для извлечения кеша (или даже ключ кеша ) является внутренним.
- Я попытался переименовать действия / контроллеры / представления, чтобы увидеть, кэшируются ли они какой-либо другой частью запроса, но это не так.
Кто-нибудь знает, как использовать несколько наборов шаблонов отображения в одном запросе или вообще отключить ActionCache
для шаблонов отображения?