Там есть несколько вариантов, которые вы have-
сделать это как HtmlHelper
расширение. Вероятно, это не идеальное решение для такого рода вещей, как управление баннерами для отображения, а связанная с ним логика действительно является проблемой компонента/виджета/частичного баннера.
Сделайте это как частичный вид и используйте Html.RenderPartial(object Model)
, чтобы позвонить ему. Теперь логика находится в частичном представлении, но также может быть некоторая логика приложения, которая не должна действительно входить в представление и действительно принадлежит модели или контроллеру. Кроме того, вы можете получить модели с жирным изображением, передаваемые на главный вид, которые также должны иметь модель представления для каждой частичной визуализации в главном представлении. Я думаю, что в некоторых ситуациях это не идеально, особенно когда данные в моделях представления для частичных данных не имеют ничего общего с данными для основного вида. Что приводит нас к ...
Сделайте это как дочернее действие с соответствующим контроллером и частичным представлением. Логика будет хорошо инкапсулирована в контроллер, и частичный вид просто отобразит все, что передается от BannerController
.
Вы могли бы, конечно, сделать это в отдельной сборке и установить его в качестве Portable area. Таким образом, вы можете встраивать частичные представления в сборку, и для повторного использования виджета можно было бы просто отбросить сборку в папке bin и ссылаться на нее в вашем основном проекте приложения (возможно, вам также потребуется настроить некоторую конфигурацию) ,
Независимо от того, сделаю ли я это лично или нет, это зависит от повторного использования компонента; если честно, я бы, вероятно, установил его внутри области в основном приложении, а затем, если найду, что мне нужно его повторно использовать, переместите его в переносимую область.
Мне также нравится поддерживать логику доступа к данным в отдельном сборке и использовать repository pattern along with IoC to inject repositories для доступа к данным в контроллеры.