Есть несколько вариантов, которые у вас есть -
сделать это как HtmlHelper
расширение. Вероятно, не идеально подходит для такого рода вещей, поскольку управление отображаемыми баннерами и связанной с ними логикой действительно является задачей баннерного компонента / виджета / частичного.
Сделайте это как частичное представление и используйте Html.RenderPartial(object Model)
для его вызова. Теперь логика находится в частичном представлении, но может также существовать некоторая логика приложения, которая не должна действительно идти в представление и действительно принадлежит модели или контроллеру. Кроме того, в конечном итоге вы можете передать модели с толстым видом на основной вид, которые также должны нести модель вида для каждой части, отображаемой на главном виде. Я думаю, что в некоторых ситуациях это не идеально, особенно когда данные в моделях представления для частичек не имеют ничего общего с данными для основного представления. Что приводит нас к ...
Выполните это как дочернее действие со связанным контроллером и частичным представлением. Логика будет красиво инкапсулирована в контроллере, а частичное представление просто отобразит все, что было передано из BannerController
.
Вы, конечно, можете поместить это в отдельную сборку и настроить как Переносная область . Таким образом, вы можете встроить частичные виды в сборку, и для повторного использования виджета достаточно просто отбросить сборку в папке bin и сослаться на нее в своем основном проекте приложения (возможно, вам также потребуется настроить некоторую конфигурацию) ,
Будет ли я делать это лично, зависит от повторного использования компонента; если честно, я бы, вероятно, для начала установил его внутри области в главном приложении, а затем, если обнаружу, что мне нужно повторно использовать его, переместил бы его в переносную область.
Мне также обычно нравится хранить логику доступа к данным в отдельной сборке и использовать шаблон репозитория вместе с IoC для внедрения репозиториев для доступа к данным в контроллеры.