.NET MVC DisplayModeProvider откат
Я сейчас пользуюсь 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 ответ
Вы можете сделать это, динамически изменяя настройки маршрута. Определите иерархию так, как вы хотите: сначала планшет, затем мобильный, а затем веб-страницы.
Вот пример того, как 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