我正在使用新的ASP.NET MVC 4测试版,我正在尝试创建一个主要使用响应式设计的系统,但对于一个特定的视图,我使用移动视图为移动设备呈现特定视图。
我的结构很简单,我有一个Show.cshtml,然后我有一个Show.mobile.cshtml。
如果我通过IIS Express从我的开发机器上获取我的网站,这个视图可以正确显示iPad,iPhone,Android手机和移动Opera,如果我在我的开发机器上本地发布到IIS 7.5,它也可以正常工作
问题出现在我们部署到实时服务器时,我们尝试在两个不同的服务器上进行部署。然后移动视图将仅提供给iPhone,而不是其他移动设备。这一直是如此。我们的服务器设置为Windows 2003 / IIS6和Windows 2008 R2 / IIS7.5,两者的工作方式相同,只有iPhone才能在移动视图中使用。
这可能是什么原因?
我没有为global.asax添加任何自定义内容。
更新
经过一些研究后,我很清楚DisplayMode和移动视图的默认行为取决于Request.Browser.IsMobileDevice标志。反过来,这个标志似乎依赖于.NET Framework文件夹的Config / Browsers文件夹中的.browser文件。
在我的开发机器上,我有不同的.browser文件,而不是我部署到的服务器上的文件。到目前为止,我已经尝试在我的机器上部署我在Web应用程序的App_Browsers文件夹中的那些,但这并没有解决我的问题。这可能是要走的路吗?
答案 0 :(得分:6)
这不是你问题的完整答案,但我认为它仍然有用。
根据我的经验,ASP.NET并不擅长解决浏览器功能。所以,我建议调查一下51Degrees.Mobi Foundation。史蒂文桑德森有一篇很好的博客文章:
Using 51Degrees.Mobi Foundation for accurate mobile browser detection on ASP.NET MVC 3
我不完全确定,但您应该能够轻松地将其连接到ASP.NET MVC 4 DisplayMode基础结构。这是一个很好的资源:
答案 1 :(得分:0)
我认为我在下面给出的解决方案是答案(它工作了一会儿),但过了一段时间它仍然转向了错误的观点。
与互联网其他部分一样,我安装了51 Degrees from Nuget 这非常有效,并且很容易设置
(以下对我不起作用,但也许对你有用) http://www.nuget.org/packages/Microsoft.AspNet.Mvc.FixedDisplayModes
看起来这是一个众所周知的错误:http://aspnetwebstack.codeplex.com/workitem/280?PendingVoteId=280
根据上面的codeplex链接,请记住确保:
用于自定义已注册视图列表的一小组项目 引擎(例如,在Global.asax中)你应该确保你 正在引用Microsoft.Web.Mvc.FixedRazorViewEngine或 Microsoft.Web.Mvc.FixedWebFormViewEngine,而不是那些类 运送核心运行时二进制文件