ASP.NET MVC4中的显示模式

4

有人提到当浏览器是移动设备时,ASP.NET MVC4将请求_Layout.Mobile.cshtml页面。实际情况并非如此。

是否需要进行任何配置以启用此功能?

6个回答

4
根据ASP.NET团队(http://www.asp.net/whitepapers/mvc4-release-notes)的说法:
如果您的Views\Shared文件夹中包含_Layou.cshtml和_Layout.mobile.cshtml模板,则默认情况下应用程序在移动浏览器请求时使用_Layout.mobile.cshtml,而在其他请求中使用_Layout.cshtml。
如果您有这些文件,那么问题可能是无法正确检测到移动引擎,请告诉我们您是否将MVC 3项目升级为MVC 4或创建了新的MVC 4项目? 如果是前者,建议您尝试创建一个新的MVC 4项目,并查看问题是否仍然存在,如果仍然存在,则可能是MVC 4安装出现了问题...
编辑:您需要将Views\Shared\_Layout.cshtml复制到Views\Shared\_Layout.Mobile.cshtml。因为它似乎没有自动添加。

1
请查看我在 http://www.asp.net/mvc/tutorials/mvc-4/aspnet-mvc-4-mobile-features 上发布的 ASP.NET MVC 4 移动特性教程。 - RickAndMSFT
我现在正在跟随那个教程,并遇到了一个问题,即 iPhone(通过 Mac OS X 上的 iOS 模拟器)被检测到(iPad 没有),而我的物理 Android 手机(2.3.3 上的标准浏览器)没有被检测到。这个“移动”功能是不是只是我们在某个时候需要覆盖的魔法?这让我担心,在任何生产使用中它都不能有效地识别移动浏览器。 :-/ - Norman H
经过一番搜索,我从http://detectmobilebrowsers.com/添加了正则表达式代码,现在Android检测正常工作了。 :-/ - Norman H

1

这就是我之前发布的内容 :) - Stas Svishov
我在2012年2月给出了这个答案,你在2013年3月更新了你的答案并包含了链接。 - Calin

1

首先... 确保您有一个MVC4项目 - 要么是从模板中清除的,要么是正确地遵循了Microsoft的升级说明。

与其他版本的MVC一样,项目结构按照约定工作,通常视图必须位于特定文件夹中 - 例如,期望您的FoodController的视图位于Views -> Food中,而模板则期望在Views -> Shared文件夹中。

假设_Layout.Mobile.cshtml在共享视图文件夹中,则它可能区分大小写 - 尽管我不确定。

您是否使用Fiddler检查发送的请求(标头和UA)和返回的响应?


1
我有同样的问题,在我的情况下,我从MVC3升级到了MVC4,但我想我错过了什么。有趣的是它在iPhone浏览器上可以工作,但不适用于Android(至少其中一些)。在干净的MVC4项目中运行良好。所以我不确定我错过了什么,我会再次查看MVC3 > 4升级说明,看看我错过了什么。如果我没有看到任何东西,我将尝试使用51devices进行实现或创建一个干净的MVC4项目。
更新:再次按照升级说明进行操作,我没有看到我错过的任何内容。所以最终我采用了51devices的方式,根据以下说明进行实现: http://51degrees.mobi/Support/Blogs/tabid/212/EntryId/26/51Degrees-mobi-and-MVC4.aspx 现在安卓设备似乎可以正常触发移动显示。唯一的更新是使用:
`DisplayModeProvider.Instance.Modes.Insert` 

代替

 `DisplayModes.Modes.Insert`

0

如果您的MVC应用程序中有区域,您需要修改每个区域内的_ViewStart.cshtml


0

确保您的移动浏览器发送正确的用户代理字符串,特别是如果您正在使用移动浏览器模拟器。我在控制台设置中使用了新的Chrome用户代理覆盖,并使用一些Firefox插件取得了良好的效果。


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