我问是因为我在我的网站上注意到,如果我用 iPhone 打它,有时它会显示移动视图,有时它会显示常规视图。
我还读到 MVC 4 在确定浏览器是否来自移动设备方面并不是特别有效,这是真的吗?如果是这样,我们能做些什么呢?
我问是因为我在我的网站上注意到,如果我用 iPhone 打它,有时它会显示移动视图,有时它会显示常规视图。
我还读到 MVC 4 在确定浏览器是否来自移动设备方面并不是特别有效,这是真的吗?如果是这样,我们能做些什么呢?
更新: Microsoft 已针对此错误发布了解决方法包。
我在这里添加了这个解决方法,
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();
有关详细信息,请参阅此。