如何在.Net MVC5中防止非移动视图使用移动布局?

3

我正在开发一个有桌面和移动端视图的网站,使用MVC5技术。

该项目为每个版本分别设计了不同的布局:

_Layout.cshtml
_Layout.Mobile.cshtml 

在_ViewStart.cshtml中,以下代码应该可以让移动设备显示.Mobile.cshtml视图(如果存在),否则显示桌面版本:
DisplayModeProvider.Instance.RequireConsistentDisplayMode = true;

问题:

我遇到的问题是,一些没有.Mobile版本的视图使用_Layout.Mobile显示,而其他一些视图则表现正常。

尝试过的方法:

我在有问题的视图.cshtml文件中强制执行了浏览器覆盖:

Request.RequestContext.HttpContext.SetOverriddenBrowser(BrowserOverride.Desktop);

然而,此解决方案并不可行,因为覆盖仍然存在,当用户继续浏览网站时,所有页面都会以桌面模式显示,即使它们不应该。
另一个不可接受的解决方案是在退出此屏幕时手动清除覆盖,因为用户可能已选择查看桌面版本,我们将撤销他们的操作。
实际问题:
如何强制将视图切换到桌面模式,而不会在用户继续浏览时保留更改? 关于移动视图,还有其他我需要注意的事项吗?
1个回答

1
我已经解决了这个问题。我的做法是暂时性的,不是正式的解决方案,但如果其他人也面临同样的问题,可能会有所帮助。
我创建了一个不同的布局文件,比如说我命名为 _Layout.DesktopForMobile.cshtml。它基本上和 _Layout.cshtml 一样(除了我利用新文件在特定的移动设备页面中有些微小的区别)。我手动强制问题视图使用我的新布局,并且因为这个新布局没有 .Mobile 版本,它们被正确地显示。

这似乎是唯一的解决方案。你不能简单地用默认布局覆盖视图中的Layout变量:Layout =“~/views/shared/_layout.cshtml”……系统仍然会加载.Mobile视图。我复制了默认布局,并将其重命名为“_Layout.Desktop.cshtml”,现在我的视图可以正常工作了。谢谢。 - Captain Betty

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接