Как сделать один ASP.NET, сайт MVC “происходит” от другого

Мой вопрос подобен "ASP.NET 2 проекта совместно использовать те же файлы", но с наклоном MVC ASP.NET.

В основном у нас есть два сайта, одно базирование главным образом на другом (примерно 90%-е представления, контроллеры, изображения, во втором идентичны первому). Однако в некоторых случаях представления могут отличаться, или контроллер во втором сайте может отличаться от первого.

Есть ли какие-либо простые способы достигнуть этого в ASP.NET MVC?

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

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

У кого-либо есть какие-либо лучшие подходы или способы, которыми может быть упрощен этот подход?

13
задан Community 23 May 2017 в 12:04
поделиться

5 ответов

Эта статья может помочь: http: // dotnetslackers.com / article / aspnet / storing-asp-net-mvc-controllers-views-in-separamblies.aspx

По сути, это включает создание вашего собственного WebFormViewEngine, который сообщает MVC, где искать представления.

6
ответ дан 2 December 2019 в 00:02
поделиться

Если они на 90% одинаковые и вы хотите синхронизировать их по мере развития функциональности, я бы подумал о том, чтобы сделать их одним веб-приложением и использовать заголовок хоста для различения и изменения изображений/ссылки/текста/функциональности/etc. между двумя сайтами.

Вы можете сделать это в своем BaseController: посмотрите на заголовок хоста и создайте объект Brand, к которому каждая страница и представление будут иметь доступ, так же как и к объекту User. Этот объект Brand может включать название сайта, канонический Url для сайта, расположение каталога изображений для этого бренда, булевы значения для включения или выключения определенных функций, ...

Теперь в контроллере вы можете просто спросить if (Brand.SupportsPageX) {...}, чтобы решить, что показывать дальше. А если вы сделаете объект бренда частью вашей базовой модели представления или поместите его в коллекцию представлений, вы можете иметь представления, которые используют название бренда, каталог изображений, ... для настройки их внешнего вида.

4
ответ дан 2 December 2019 в 00:02
поделиться
  1. Поместите как можно больше в общий проект библиотеки, не относящейся к пользовательскому интерфейсу. Я делаю это в каждом проекте, над которым я работаю, это повышает тестируемость, общий код с Windows Services и множество других причин.

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

    Сделав это, вы можете пойти дальше и создать вторую библиотеку с некоторыми общими элементами MVC/UI.

  2. В зависимости от вашего мнения об этом, RenderAction может немного помочь здесь. Как вы знаете, RenderAction позволит вам группировать эти компоненты контроллера/представления и передавать переменные аргументы во время выполнения.

2
ответ дан 2 December 2019 в 00:02
поделиться

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

2
ответ дан 2 December 2019 в 00:02
поделиться

Я работал с областями, чтобы создать несколько веб-сайтов, которые можно разместить с помощью одной учетной записи хостинга. Я думаю, вы могли бы использовать аналогичный подход. Реализовав общий функционал в базовом проекте, он будет доступен для каждой области. Вы также можете переопределить любое из базовых представлений или контроллеров, реализовав их в этой области. Это может потребовать некоторой настройки ViewEngine и Routing, но я думаю, что это можно сделать.

2
ответ дан 2 December 2019 в 00:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: