Возможно, я неправильно понимаю вопрос, но я бы сказал, что более распространенный подход - иметь конкретные типы моделей представлений.
Итак, ваши просмотры будут иметь @model IPageViewModel<SomePageType>
вместо @model SomePageType
.
В вашем контроллере вы бы return View(new SomePageViewModel(currentPage))
вместо return View(currentPage)
.
Тот же принцип применим к другим типам контента (блоки, медиа и т. Д.).
Я бы держался подальше от логики в самих типах контента, за исключением особых методов, таких как SetDefaultValues
.
В вашем конкретном случае это звучит так, как будто вы должны добавить список содержимого в качестве свойства к экземпляру модели представления, который был первоначально передан, а затем перечислить это свойство в представлении, чтобы отобразить каждый элемент с использованием частичного представления?
Редактировать: Я думаю, что интерфейсы отлично работают для "группировки" типов контента, например, для получения всех IArticle
страниц, независимо от точного типа контента. Я обычно помещаю логику для извлечения коллекций контента (например, all article pages
) в классы репозитория или методы действия контроллера. Конечно, такая логика, помимо фильтрации по интерфейсу, может также отражать атрибуты.