.NET MVC DisplayModeProvider fallback



我当前正在使用 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在其中?

您可以通过动态更改路线偏好来做到这一点。先定义层次结构,如平板电脑,然后移动和网页。

这是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自定义视图路由

相关内容

  • 没有找到相关文章

最新更新