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 的移动“选择器”此时是不是不可靠?的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC - jquery 日期选择器

日期选择器 ASP.NET c# mvc4

Asp.Net MVC 中的 JQuery UI 日期选择器

ASP .NET MVC 5 日期和时间选择器

日期选择器不工作(ASP.NET MVC)

Asp.net MVC 中 Qty Hour 段的时间选择器