Реализация «обратной» или «вложенной» главной страницы с помощью ASP.NET

Я надеюсь, что мое загадочное название не будет слишком загадочным, но я попытаюсь объяснить, чем я на самом деле хочу заниматься.

У меня есть главная страница «A», у которой есть дочерние страницы «B» и «C». Это прекрасно реализовано с помощью стандартной модели главной страницы в ASP.NET.

На моем сайте две темы: «Т1» и «Т2». На самом деле они представляют разных партнеров, T1 - наша собственная компания, а T2 - партнер.

Я хочу отображать определенные вещи на страницах «B» и «C» в зависимости от того, какую тему я использую. Например, я могу захотеть вставить дополнительные кнопки или графику на страницу «B», относящуюся к партнеру по теме «T2». Этот контент будет находиться в произвольном месте на странице в зависимости от самой страницы. Некоторые партнеры могут даже не использовать эту функцию.

Проблема в том, что я хочу сделать это как можно более декларативно и свести к минимуму знания, которые страницы имеют о теме.

Здесь на помощь приходит концепция «обратной» главной страницы. Я хочу определить область на дочерней странице, в которую может быть вставлено конкретное содержание «темы». (Я говорю «тема», потому что это то, что использует ASP.NET - и, скорее всего, то, к чему я бы привязал контент).

Итак, вам может быть интересно:

  • Почему вы не можете просто использовать для этого главную страницу и добавить дополнительные разделы контента? Причина в том, что контент может отображаться где угодно на странице в определенном для этой страницы месте.
  • Почему вы не можете использовать «вложенную» главную страницу? По сути по той же причине.

Возможное решение:

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

Это кажется немного неуклюжим - так что мне интересно, какие решения другие могли придумать для подобных ситуаций.


person Simon_Weaver    schedule 19.01.2009    source источник


Ответы (4)


вы можете использовать CSS для размещения разделов содержимого в любом месте страницы. так что я не буду беспокоиться о расположении страниц и т. д.

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

person Matt Kocaj    schedule 19.01.2009

В настоящее время я работаю над сайтом, у которого есть аналогичные требования, которые слишком высоки для CSS. В одном макете логин расположен горизонтально вверху порядка рендеринга, а в другом - в правом столбце.

Мы используем стандартные темы ASP.NET для вывода CSS, URL-адресов логотипов через SkinID и т. Д.

Чтобы получить настраиваемый макет, я создал элемент управления «Загрузчик», который загружает элементы управления UserControl через список, указанный в атрибуте Loader. Атрибут может быть определен непосредственно в разметке загрузчика или через файл .skin в теме.

Каждый ключ в списке - это просто базовое имя UserControl (я добавляю путь и расширение). Элементы управления создаются с помощью Page.LoadControl ().

person devstuff    schedule 19.01.2009

Есть ли у вас исправление макета для разных партнеров? Или вы хотите, чтобы партнеры выбирали макеты во время выполнения?

Если макеты фиксированы, то один из способов - создать CSS в стиле zen (http://www.csszengarden.com/), а затем динамически загружать его в соответствии с клиентом / партнером. Если вы хотите, чтобы партнеры изменяли макеты во время выполнения, возможно, вы захотите использовать Webparts.

Надеюсь это поможет.

person Jomit    schedule 19.01.2009
comment
Веб-части действительно усложнят ваш проект / пожалуйста, старайтесь их избегать. Вы не хотите, чтобы в итоге получилось что-то похожее на Sharepoint содрогается - person Matt Kocaj; 19.01.2009
comment
макеты по сути такие же. будут некоторые общие графические различия и программные, такие как разные меню, но по сути одинаковые. в настоящее время я все равно управляю всеми партнерами. в основном речь идет о дополнительном контенте в произвольных (но известных) местах на содержательных страницах - person Simon_Weaver; 19.01.2009
comment
Я бы придерживался программных изменений, как вы сказали, что вы уже делаете. но используйте CSS для различий в графике / макете. PS: не используйте sharepoint. его зло (я знаю, что это невежливо размещать необоснованные замечания, но некоторые вещи известны. сатана - это зло. sharepoint - это зло) - person Matt Kocaj; 21.01.2009

Вы МОЖЕТЕ использовать вложенные главные страницы в VS2008!

Глянь сюда --

Блог Скотта Гатри < / а>

person GeekyMonkey    schedule 19.01.2009