我当前正在使用 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自定义视图路由