Я настраиваю свой сайт MVC 5 по категориям, затем контроллер, модель, просмотр подпапок в каждой категории, то есть папки корневой папки \Home и \Products будут иметь эти три подпапки, а также корневую папку \Shared\Views. Я прочитал потрясающую статью Мэтью Ренца, Чистая архитектура. в ASP.NET MVC 5. Частично сделано путем создания пользовательского RazorViewEngine, а именно:
public CustomRazorViewEngine()
{
ViewLocationFormats = new string[]
{
"~/{1}/Views/{0}.cshtml",
};
PartialViewLocationFormats = new string[]
{
"~/Shared/Views/{0}.cshtml"
};
}
Помимо этого, не так много изменений. Мне было интересно, смогу ли я развить эту идею и настроить проект веб-сайта с корневой папкой \Portals и подпапками для каждого портала, используя некоторый идентификатор (имя или номер) - аналогично DNN. Изменения в коде пользовательского движка Razor View могут выглядеть примерно так:
public CustomRazorViewEngine()
{
ViewLocationFormats = new string[]
{
"~/Portals/{2}/{1}/Views/{0}.cshtml",
};
PartialViewLocationFormats = new string[]
{
"~/Portals/{2}/Shared/Views/{0}.cshtml"
};
}
Однако я не уверен, откуда берутся значения {0} и {1}. Я смог найти способ получить {2}, название веб-сайта портала. Относительные пути для остальной части сайта, такие как \Content, \Scripts и т. д. Думаю, я мог бы структурировать сам.
Цель этого подхода — предоставить клиенту решение, в котором можно повторно использовать общий код для поддержки ряда порталов с уникальными оболочками и функциями. Спасибо за ваше время и внимание и дайте мне знать, если у вас есть какие-либо вопросы.
Джон