.NET MVC DisplayModeProvider откат - PullRequest
0 голосов
/ 09 мая 2019

В настоящее время я использую DisplayModeProvider, чтобы проверить, поступает ли мобильный запрос и обслуживает ли файл Page.mobile.cshtml, если я обнаруживаю мобильный запрос, в противном случае я обслуживаю страницу по умолчанию Page.cshtml. Это также работает как запасной вариант - если есть мобильный запрос на PageX, но PageX.mobile.cshtml не существует, но есть PageX.cshtml, я обслуживаю PageX.cshtml. Это работает как задумано.

Я хотел бы добавить к резервному поведению, поскольку я включаю поддержку запросов планшета. Поэтому, когда обнаружен запрос планшетного устройства, если у меня есть Page.tablet.cshtml, он будет обрабатывать этот файл. Если файла ...tablet.cshtml нет, я бы хотел, чтобы он попытался обслужить файл Page.mobile.cshtml, а если Page.mobile.cshtml не существует, мы бы подали файл Page.cshtml.

Есть ли способ сделать это без необходимости создания ...tablet.csthml файла для каждой страницы и Html.Partial с ...mobile.cshtml внутри него?

1 Ответ

0 голосов
/ 09 мая 2019

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

Вот пример того, как CustomViewEngine может сделать это:

public class MyViewEngine : RazorViewEngine
{
    public MyViewEngine()
        : base()
    {
        ViewLocationFormats = new[] {
        "~/Views/tab/{1}/%1/{0}.cshtml",
        "~/Views/mobile/{1}/%1/{0}.cshtml",
        "~/Views/{1}/%1/{0}.cshtml",
        "~/Views/Shared/{0}.cshtml"
    };

    PartialViewLocationFormats = new[] {
        "~/Views/tab/%1/{1}/{0}.cshtml",
        "~/Views/mobile/%1/{1}/{0}.cshtml",
        "~/Views/%1/{1}/{0}.cshtml",
        "~/Views/Shared/{0}.cshtml"
    };
   }
}

Здесь будет сначала производиться поиск в папке /Views/tab/, затем /Views/mobile/, затем в папках /Views/ и /Views/Shared/.

Подробности реализации обсуждались здесь: ASP.NET MVC Custom View Routing

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...