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