首页 新闻 会员 周边

mvc4中使用了jquery.mobile,为什么有时候视图是移动版的,有时候又显示是桌面版的呢?

0
悬赏园豆:15 [已关闭问题] 关闭于 2013-07-23 18:35

mvc4中使用了jquery.mobile,为什么有时候视图是移动版的,有时候又显示是桌面版的呢?

 

好奇怪,重启一下站点手机访问就又正常了,过一会儿之后再访问又变成桌面版了

问题补充:

还有一个特点是刚发布的时候,手机访问或者在chrome模拟移动端访问都是正常的,过了几个小时候后再访问就变成桌面版了,然后就一直是桌面版的。

 

好像是RenderBody里的视频有问题,比如首页,有时候RenderBody输出的是Home.cshtml,有时候输出的是Home.Mobile.cshtml

小徐的博客的主页 小徐的博客 | 初学一级 | 园豆:15
提问于:2013-07-19 13:05
< >
分享
所有回答(2)
0

你测试时,什么情况下会显示移动版?什么情况下会显示桌面版?

dudu | 园豆:30994 (高人七级) | 2013-07-19 17:24

桌面版和移动版的View的区别是移动版的View的名称加了Mobile。比如Home.cshtml,则移动版为Home.Mobile.cshtml

本地用chrome测试时,通过修改User Agent来模拟移动设备都没有问题,但是发布后,用UC或QQ移动浏览器访问时,有时候调用的是Home.cshtml,有时候是Home.Mobile.cshtml,我也不知道是为什么

支持(0) 反对(0) 小徐的博客 | 园豆:15 (初学一级) | 2013-07-19 22:26

@小徐的博客: 建议检查一下UC或QQ移动浏览器是的UserAgent是什么,MVC是根据C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\Browsers中的配置文件检测是不是移动浏览器的

支持(0) 反对(0) dudu | 园豆:30994 (高人七级) | 2013-07-20 12:31

@dudu: 我检查过了,这个是没问题的。还有一个特点是刚发布的时候,手机访问或者在chrome模拟移动端访问都是正常的,过了几个小时候后再访问就变成桌面版了,然后就一直是桌面版的。

支持(0) 反对(0) 小徐的博客 | 园豆:15 (初学一级) | 2013-07-21 14:24

@小徐的博客: 你是不是设置了OutputCache

支持(0) 反对(0) dudu | 园豆:30994 (高人七级) | 2013-07-21 16:18

@dudu: 这个没有,全都没有都设置outcache。 谢谢你一直帮助,确实被这个难住了,你可以看一下网站。www.huangshi100.com

支持(0) 反对(0) 小徐的博客 | 园豆:15 (初学一级) | 2013-07-21 19:44

@小徐的博客: 建议在PC与Mobile视图中显示一下当前的UserAgent

支持(0) 反对(0) dudu | 园豆:30994 (高人七级) | 2013-07-21 20:41

@dudu: 我比较过用手机访问正常的时候的userAgent和访问显示桌面版的时候的UserAgent是一样的。

UserAgent:Mozilla/5.0 (Linux; U; Android 4.0.4; zh-CN; GT-I9308 Build/IMM76D) AppleWebKit/534.31 (KHTML, like Gecko) UCBrowser/9.1.1.309 U3/0.8.0 Mobile Safari/534.31
UserAgent:Mozilla/5.0 (Linux; U; Android 4.0.4; zh-CN; GT-I9308 Build/IMM76D) AppleWebKit/534.31 (KHTML, like Gecko) UCBrowser/9.1.1.309 U3/0.8.0 Mobile Safari/534.31

支持(0) 反对(0) 小徐的博客 | 园豆:15 (初学一级) | 2013-07-22 12:44

@dudu: 好奇怪,重启一下站点手机访问就又正常了,过一会儿之后再访问又变成桌面版了

支持(0) 反对(0) 小徐的博客 | 园豆:15 (初学一级) | 2013-07-22 12:47

@dudu: 好像是RenderBody里的视频有问题,比如首页,有时候RenderBody输出的是Home.cshtml,有时候输出的是Home.Mobile.cshtml

支持(0) 反对(0) 小徐的博客 | 园豆:15 (初学一级) | 2013-07-22 14:45

@dudu: 这个问题解决了,是mvc4的一个bug

如下:

在网上发有人提出和我一样的问题:
http://forums.asp.net/t/1824033.aspx/2/10?MVC+4+RC+Mobile+View+Cache+bug+

这个问题是mvc4的一个bug,视图缓存bug,在移动视图访问过,在刚15分钟过期时如果有人先访问桌面视图,则以后移动端访问就显示桌面端的视图。

微软提供了一个临时的解决方案:
http://www.nuget.org/packages/Microsoft.AspNet.Mvc.FixedDisplayModes


再提代其它几个解决方案:
在global.asax中以下代码中加入
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();

//以下是新添加的代码

//第一种方法
ViewEngines.Engines.OfType<RazorViewEngine>().First().ViewLocationCache =
DefaultViewLocationCache.Null;

//第二种方法
ViewEngines.Engines.OfType<RazorViewEngine>().First().ViewLocationCache =
new DefaultViewLocationCache(Cache.NoSlidingExpiration);
}

支持(0) 反对(0) 小徐的博客 | 园豆:15 (初学一级) | 2013-07-23 18:35

@小徐的博客: 果然是缓存引起的,建议写一篇博客分享一下

支持(0) 反对(0) dudu | 园豆:30994 (高人七级) | 2013-07-23 18:37
0

在网上发有人提出和我一样的问题:
http://forums.asp.net/t/1824033.aspx/2/10?MVC+4+RC+Mobile+View+Cache+bug+

这个问题是mvc4的一个bug,视图缓存bug,在移动视图访问过,在刚15分钟过期时如果有人先访问桌面视图,则以后移动端访问就显示桌面端的视图。

微软提供了一个临时的解决方案:
http://www.nuget.org/packages/Microsoft.AspNet.Mvc.FixedDisplayModes


再提代其它几个解决方案:
在global.asax中以下代码中加入
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();

//以下是新添加的代码

//第一种方法
ViewEngines.Engines.OfType<RazorViewEngine>().First().ViewLocationCache =
DefaultViewLocationCache.Null;

//第二种方法
ViewEngines.Engines.OfType<RazorViewEngine>().First().ViewLocationCache =
new DefaultViewLocationCache(Cache.NoSlidingExpiration);
}

小徐的博客 | 园豆:15 (初学一级) | 2013-07-23 18:34
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册