1

我问是因为我在我的网站上注意到,如果我用 iPhone 打它,有时它会显示移动视图,有时它会显示常规视图。

我还读到 MVC 4 在确定浏览器是否来自移动设备方面并不是特别有效,这是真的吗?如果是这样,我们能做些什么呢?

4

1 回答 1

0

更新: 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();

有关详细信息,请参阅

于 2012-08-08T07:52:34.547 回答