0

我目前正在使用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

4

1 回答 1

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

于 2019-05-09T20:08:25.850 回答