разделение главной страницы для каждого клиента

#asp.net #dynamic #client #master-pages

#asp.net #динамический #клиент #основные страницы

Вопрос:

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

Что касается фактических сборок для разных клиентов, я думаю, мы можем легко добиться чего-то гибкого, используя MEF или IOC.

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

Есть ли способ создать «базовую» главную страницу, которая обычно использовалась бы, а затем, если мы хотим развернуть на клиенте A, мы можем просто каким-то образом внедрить клиент в качестве главной страницы. В настоящее время это обрабатывается всеми страницами содержимого, ссылающимися на Master.master в качестве своей главной страницы, а затем есть общий Master.master, при развертывании на клиенте A мы переименовываем Master.master во что-то и переименовываем специально разработанную главную страницу для клиента A (ClientA.master) в Master.master и развертываем.

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

Ответ №1:

Вы проверили темы. Мы уже использовали темы для такого рода вещей раньше.

Если для вас этого недостаточно, вы можете делать то, что хотите, на этапе pre_init. Мы используем этот код в некоторых местах

 protected void Page_PreInit(object sender, EventArgs e)
    {
        this.MasterPageFile = "~/page.master";
    }
  

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

Комментарии:

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