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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (147)

我正在使用新的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和Mobile视图的默认行为取决于Request.Browser.IsMobileDevice标志。此标志反过来似乎依赖于.NET Framework文件夹的Config / Browsers-文件夹中的.browser文件。

在我的开发机器上,我有不同于.browser文件的文件,这些文件与我部署到的服务器上的文件不同。到目前为止,我已经尝试在我的机器上部署Web应用程序的App_Browsers文件夹中的那些,但这并没有解决我的问题。

提问于
用户回答回答于

根据我的经验,ASP.NET并不擅长解决浏览器功能。所以,我可以推荐调查51Degrees.Mobi基金会。Steven Sanderson有一个很好的博客文章:

使用51Degrees.Mobi Foundation在ASP.NET MVC 3上进行精确的移动浏览器检测

我不完全确定,但你应该能够很容易地把它连接到ASP.NET MVC 4 DisplayMode基础结构。这是一个很好的资源:

51Degrees.mobi和MVC4

用户回答回答于

我认为我在下面给出的解决方案是答案(它在短时间内有效),但在一段时间后它仍然转向错误的观点。

就像互联网的其他部分一样,我从Nuget安装了51度, 这非常完美,而且非常容易设置

http://www.nuget.org/packages/Microsoft.AspNet.Mvc.FixedDisplayModes

看起来这是一个已知的bug:http : //aspnetwebstack.codeplex.com/workitem/280? PendingVoteId= 280

根据上面的codeplex链接,请记住确保这一点:

对于一小组自定义已注册视图引擎列表的项目(例如,在Global.asax中),应确保引用的是Microsoft.Web.Mvc.FixedRazorViewEngine或Microsoft.Web.Mvc.FixedWebFormViewEngine,而不是在核心运行时二进制文件中提供的类

扫码关注云+社区

领取腾讯云代金券