.NET MVC DisplayModeProvider后备

时间:2019-05-09 18:02:37

标签: asp.net-mvc mobile tablet displaymode

我目前正在使用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 :(得分:0)

您可以通过动态更改路由首选项来实现。首先定义想要的层次结构,例如平板电脑,然后是移动设备,然后是网页。

以下是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