ASP.NET MVC 2 Динамическая компоновка - PullRequest
1 голос
/ 09 февраля 2010

Как бы вы, ребята, создали динамический макет в ASP.NET MVC 2, где администраторы могли выбирать виджеты для отображения, размещать их, отключать, перемещать их и т. Д.? Я имею в виду гибкий макет, который можно изменить через панель администратора, не касаясь кода. Здесь я подумал об определении и хранении путей виджетов макетов в БД. Позже я мог связать эти виджеты с маршрутами (в БД). Для каждого запроса (контроллер, действие) я выбирал макет среди связанных виджетов и выводил их рекурсивно. Возможно, я мог бы использовать RenderAction и PartialViews для этого.

Правильно ли мое направление или я должен сосредоточиться на какой-то другой технике?

Спасибо, Якуб

Ответы [ 2 ]

2 голосов
/ 09 февраля 2010

Роб Конери сделал то же самое со своим переписыванием 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")) %>

Лично я бы выбрал первый подход, но я не вижу проблем со вторым подходом, кроме криков пуристов.

1 голос
/ 09 февраля 2010

Если вы хотите интерактивное перетаскивание виджетов, используйте jQuery или ExtJS. ExtJS имеет полный пример портала .

Если вы не хотите использовать javascript, вам нужно будет развернуть специальное решение, в котором области определены и заполнены динамически загруженными частичными представлениями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...