Problems with MVC5 DisplayModeProvider

so i have mvc 5 app with 3 display modes, desktop (default), mobile phone and tablet. I use WURFL to identify devices. Here is the code called from global.cs to register:

public static void RegisterDisplayModes(IList<IDisplayMode> displayModes){
        var datafile = HttpContext.Current.Server.MapPath(WurflDataFilePath);
        var configurer = new InMemoryConfigurer().MainFile(datafile);
        var manager = WURFLManagerBuilder.Build(configurer);
        HttpContext.Current.Cache[WURFLMANAGER_CACHE_KEY] = manager;

        bool mobileEnabled = ConfigurationManager.AppSettings["EnableMobileSite"] == "true";
        bool tabletEnabled = ConfigurationManager.AppSettings["EnableTabletSite"] == "true";

        var modeDesktop = new DefaultDisplayMode("") {
                                                        ContextCondition = (c => c.Request.IsDesktop())
                                                    };
        var modeMobile = new DefaultDisplayMode("mobile"){
                                                             ContextCondition = (c => c.Request.IsMobile())
                                                         };
        var modeTablet = new DefaultDisplayMode("tablet"){
                                                             ContextCondition = (c => c.Request.IsTablet())
                                                         };

        displayModes.Clear();
        if (mobileEnabled) displayModes.Add(modeMobile);
        if (tabletEnabled) displayModes.Add(modeTablet);
        displayModes.Add(modeDesktop);
    }

I use some extension methods for HttpRequestBase, as described in http://msdn.microsoft.com/en-us/magazine/dn296507.aspx :

public static bool IsDesktop(this HttpRequestBase request){
        return true;
    }
    public static bool IsMobile(this HttpRequestBase request) {
        return IsMobileInternal(request.UserAgent) && !IsForcedDesktop(request);
    }
    public static bool IsTablet(this HttpRequestBase request) {
        return IsTabletInternal(request.UserAgent) && !IsForcedDesktop(request);
    }

    public static void OverrideBrowser(this HttpRequestBase request, bool forceDesktop){
        request.RequestContext.HttpContext.Cache[OVERRIDE_BROWSER_CACHE_KEY] = forceDesktop;
    }

    public static bool IsForcedDesktop(this HttpRequestBase request){
        var isForced = request.RequestContext.HttpContext.Cache[OVERRIDE_BROWSER_CACHE_KEY];
        return isForced != null ? isForced.ToString().ToBool() : false;
    }

    private static bool IsMobileInternal(string userAgent) {
        var device = WURFLManagerBuilder.Instance.GetDeviceForRequest(userAgent);
        if (device.IsTablet() == true) {
            return false;
        } else {
            return device.IsMobile();
        }
    }

    private static bool IsTabletInternal(string userAgent) {
        var device = WURFLManagerBuilder.Instance.GetDeviceForRequest(userAgent);
        return device.IsTablet();
    }

, , ViewSwitcher ( , , ). mvc4. , , mvc , , ! , - ... - - ? , , ! ?

, ... ... Andy

: . , , mvc5, , , . mvc4, , . ?

+3
1

, , , . , . - RequestContext.HttpContext.Cache, , - , . HttpContext.Cache, , - - . , , , , , . , , . , - - .

+2

All Articles