为什么ASP.NET MVC中的移动视图在不同的服务器上显示不同?

时间:2012-05-08 07:27:46

标签: asp.net asp.net-mvc mobile asp.net-mvc-4

我正在使用新的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文件夹中的那些,但这并没有解决我的问题。这可能是要走的路吗?

2 个答案:

答案 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基础结构。这是一个很好的资源:

51Degrees.mobi and MVC4

答案 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,而不是那些类   运送核心运行时二进制文件