Роб Конери сделал то же самое со своим переписыванием Kona. Он смог создать регионы на странице, а затем связать виджеты с этими регионами.
На ум приходят два подхода:
1.) Во-первых, вы загружаете все свои виджеты в действие контроллера и содержимое, которое они содержат. Затем отправьте всю эту информацию о виджетах (в модели) на ваше усмотрение и выполните там фильтрацию. Это сохраняет ваше разделение между представлением и контроллером. Возможно, вы захотите создать вспомогательный метод:
<% Html.RenderWidgets("Main", Model.Widgets) %>
<% Html.RenderWidgets("SideBar", Model.Widgets) %>
Одна заметка о первом подходе. Возможно, вам понадобится какое-то соглашение об именах для ваших виджетов, чтобы вам было легче находить их частичное представление.
2.) Другой подход заключается в использовании RenderAction и вызове «RegionController», которому вы можете передать имя региона. Передача имени региона вызовет запрос для всех виджетов, которые попадают в этот конкретный регион.
<% Html.RenderAction<RegionController>(x=>x.Widgets("Main")) %>
<% Html.RenderAction<RegionController>(x=>x.Widgets("SideBar")) %>
Лично я бы выбрал первый подход, но я не вижу проблем со вторым подходом, кроме криков пуристов.