как изменить порядок поиска viewLocation в asp.net mvc? - PullRequest
0 голосов
/ 29 апреля 2018

В моем проекте у меня есть папка с именем Common, и я хочу, чтобы Asp.net Mvc осуществлял поиск в общей папке для поиска представлений, а не в общей папке.

Другими словами, порядок просмотра местоположения поиска следующий:

~/Views/Home/Index.cshtml
~/Views/Home/Index.vbhtml
~/Views/Common/Index.cshtml
~/Views/Common/Index.vbhtml

Ответы [ 2 ]

0 голосов
/ 29 апреля 2018

вы можете создать пользовательский класс наследует RazorViewEngine

usin System.Web.Mvc
namespace Views.Infrastructure{
public class CustomrazorViewEngine : RazorViewEngin{
    public CustomrazorViewEngine(){
        ViewLocationFormats=new string[]{
            "~/Views/{1}/{0}.cshtml",
            "~/Views/Common/{0}.cshtml"
            };
        }
    }
}

и в Global.asax

proteced void Application_Start()
{
    AreaRegisteration.registerAllArea();
    ViewEngines.Engines.Clear();
    ViewEngines.Engines.Add(new CustomrazorViewEngine());
    RoutConfig.registerRoutes(RouteTable.Routes);
}

Я предлагаю сделать это, чтобы предотвратить Конфликт других представленных Viewengines:

ViewEngines.Engines.Clear();
0 голосов
/ 29 апреля 2018

Простое решение.

on Application_Start событие для получения RazorViewEngine по ViewEngines.Engines коллекции и обновления ViewLocationFormats

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);

    var razorEngine = ViewEngines.Engines.OfType<RazorViewEngine>().First();
    razorEngine.ViewLocationFormats = new string[]
        {
            "~/Views/Home/Index.cshtml",
            "~/Views/Home/Index.vbhtml",
            "~/Views/Common/{0}.cshtml",
            "~/Views/Common/{0}.vbhtml"
        };
}

Если вы хотите изменить только порядок, вы можете использовать метод Concat для объединения местоположения defalut и нового местоположения.

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);

    var razorEngine = ViewEngines.Engines.OfType<RazorViewEngine>().First();

    var newLocationPath = new string[]
    {
        "~/Views/Home/Index.cshtml",
        "~/Views/Home/Index.vbhtml",
        "~/Views/Common/{0}.cshtml",
        "~/Views/Common/{0}.vbhtml"
    }.Concat(razorEngine.ViewLocationFormats);

    razorEngine.ViewLocationFormats = newLocationPath.ToArray();
}
...