Пользовательский RazorViewEngine ASP.NET MVC 5 для структуры нескольких порталов

Я настраиваю свой сайт 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 и т. д. Думаю, я мог бы структурировать сам.

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

Джон


person John VandenBrook    schedule 31.01.2017    source источник


Ответы (1)


Это заполнители в строке, которые можно использовать для помещения имени области, имени контроллера или имени действия в строку контроллером. {2} — область, {1} — контроллер, {0} — действие.

Вам также может быть интересно узнать, что при использовании Asp.Net Core легко получить стандартный Razor View Engine для поиска представлений и т. д. в настраиваемых местах с помощью ViewLocationExpander, вместо того, чтобы создавать новый механизм просмотра, который наследуется от Razor View Engine. . Я упоминаю об этом только потому, что вы добавили тег asp.net-core-mvc в свой вопрос.

Вот ответ на переполнение стека, который показывает, как: -using-custom-locations#36772778">Как указать расположение представления в asp.net core mvc при использовании настраиваемых местоположений?

person RonC    schedule 31.01.2017
comment
Спасибо Рон! Я думал, у Core будет что-то помимо Areas. Мне нужно будет прочитать об областях, так как это было некоторое время. В этом соглашении о конфигурации, возможно, Области означают больше, чем какое-то произвольное слово, например, Порталы. Я хотел бы оставить это открытым, чтобы увидеть, сделали ли другие это без областей, а не с представлением (somepathtotheview.cshtml, модель) и т. д. - person John VandenBrook; 01.02.2017
comment
Нет, они просто продвинули концепцию Района. Но ядро ​​​​Asp.Net прекрасно настраивается, поэтому вы действительно можете структурировать свой проект так, как хотите, если решите внедрить новые соглашения для своего проекта. - person RonC; 01.02.2017