Как создать повторно используемую разметку «виджет» для модулей на сайте ASP.NET MVC 2.0? - PullRequest
0 голосов
/ 05 октября 2010

Сценарий:

платформа: ASP.NET 4.0, MVC 2.0 (не обязательно должен быть MVC, если это не правильное решение)

Создание различных виджетов, которые наследуют одну и ту же разметку ядра:

<div class="widget">
    <div class="hd-widget">
        <!-- dynamically inject code here for each actual widget -->

    </div>
    <div class="bd-widget">
        <!-- dynamically inject code here for each actual widget -->
    </div>
    <div class="ft-widget">
        <!-- dynamically inject code here for each actual widget -->
    </div>
</div>

Приведенный выше «упрощенный» пример должен быть в каком-то элементе управления или главной странице многократного использования.

Поток выглядит примерно так:

Controller -> View ->Частичное представление (1..n) -> разметка виджета

Пользователь создает действие, вызывающее контроллер.Контроллер пытается отобразить представление, которое содержит контент + несколько виджетов (левый рельс, правый рельс и т. Д.).Все виджеты имеют свои собственные отдельные частичные представления, но каждое частичное представление должно наследовать или потреблять базовый набор разметки виджетов и иметь области контроллера, в которые встроена функциональность.

Функциональные возможности в верхнем, нижнем и нижнем колонтитулах могут представлять собой обычный текст, HTML или дополнительные пользовательские элементы управления.

Какой наилучший рекомендуемый подход?

Ответы [ 2 ]

1 голос
/ 19 января 2011

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

Например.

public class WidgetModel
{
   public string ControllerName { get; set; }
   public string HeaderAction { get; set; }
   public string BodyAction { get; set; }
   public string FooterAction { get; set; }
}

И у вас есть виджет, как

<div class="widget">
   <div class="hd-widget">
      <%: Html.RenderAction(Model.HeaderAction, Model.ControllerName) %>
   </div>
   <div class="bd-widget">
      <%: Html.RenderAction(Model.BodyAction, Model.ControllerName) %>
   </div>
   <div class="ft-widget">
      <%: Html.RenderAction(Model.FooterAction, Model.ControllerName) %>
   </div>
</div>

Конечно, вы можете добавить к нему больше, если хотите.

0 голосов
/ 06 октября 2010

Я предполагаю, что ваши виджеты будут храниться в БД.

Полагаю, вам понадобятся таблицы для Paths, PageSettings, Widgets, WidgetInstances, MasterPages, MasterPageZones и Zones.

IПодумайте, что каждый виджет должен будет вызвать RenderAction, и это действие будет сохранено в БД против виджета.Заголовок и нижний колонтитул виджета, вероятно, можно просто извлечь из БД.

Когда я сделал это, я потратил довольно много времени на создание динамического редактора для каждого из виджетов, состояние каждого виджета сериализовалось в jsonединственная проблема, над которой я все еще работаю, - это динамическая проверка редактора виджетов.

Макеты страниц обрабатываются с помощью пользовательского класса персонализации, в котором хранятся главная страница, путь, идентификатор пользователя и т. д.

Этодовольно сложное решение с использованием сортировки JQuery, но очень быстрое и дружественное к SEO.

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