ASP.NET MVC 4 的移动“选择器”此时是不是不可靠?
Posted
技术标签:
【中文标题】ASP.NET MVC 4 的移动“选择器”此时是不是不可靠?【英文标题】:Is ASP.NET MVC 4's Mobile "Selector" Unreliable at this time?ASP.NET MVC 4 的移动“选择器”此时是否不可靠? 【发布时间】:2012-07-16 05:50:19 【问题描述】:我问是因为我在我的网站上注意到,如果我用 iPhone 访问它,有时它会显示移动视图,有时它会显示常规视图。
我还了解到 MVC 4 在确定浏览器是否来自移动设备方面并不是特别有效,这是真的吗?如果是这样,我们能做些什么?
【问题讨论】:
您是否总是使用同一部 iPhone 访问您的网站?同一页? @Darin,是的...同一部 iPhone,同一页。即使在几次刷新后问题仍然存在,然后“找到”移动视图。 看看这是否有帮助。它谈到了您面临的问题,它使用自定义视图引擎根据请求呈现视图***.com/questions/1387354/… 见forums.asp.net/t/1824033.aspx 我们已经确认这是一个错误。该错误将在 MVC 4 RTM 发布后修复。 【参考方案1】:更新:Microsoft 已针对此错误发布了workaround package。
我已在 here 添加了此解决方法,
public class MyDefaultViewLocationCache : DefaultViewLocationCache, IViewLocationCache
public MyDefaultViewLocationCache(TimeSpan timeSpan): base(timeSpan)
public MyDefaultViewLocationCache()
: base()
public new string GetViewLocation(HttpContextBase httpContext, string key)
var location = base.GetViewLocation(httpContext, key);
if (location == null)
var cache = httpContext.Cache;
RemoveAllCacheStartWith(key, cache);
return location;
private static void RemoveAllCacheStartWith(string key, System.Web.Caching.Cache cache)
var keyWithoutDisplayMode = key.Substring(0, key.Substring(0, key.Length - 1).LastIndexOf(':') + 1);
var items = new List<string>();
var enumerator = cache.GetEnumerator();
while (enumerator.MoveNext())
var _key = enumerator.Key.ToString();
if (_key.StartsWith(keyWithoutDisplayMode))
items.Add(_key);
foreach (string item in items)
cache.Remove(item);
public new void InsertViewLocation(HttpContextBase httpContext, string key, string virtualPath)
base.InsertViewLocation(httpContext, key, virtualPath);
// In App Start
ViewEngines.Engines.OfType<RazorViewEngine>().First().ViewLocationCache =
new MyDefaultViewLocationCache();
详情见this。
【讨论】:
以上是关于ASP.NET MVC 4 的移动“选择器”此时是不是不可靠?的主要内容,如果未能解决你的问题,请参考以下文章