2013-05-22 73 views
1

我有我曾經51Degrees(精簡版),檢測設備,並相應地選擇移動(.mobile.cshtml)或桌面( .cshtml)視圖MVC4應用程序。 51Degrees可以正確地完成這項工作。但是,如果我想使用HttpContext.SetOverriddenBrowser(BrowserOverride.Desktop)從手機切換到桌面視圖(在移動設備上),它不起作用。僅供參考,它工作沒有51Degrees。查看交換機不51Degrees

下面是選擇(在Global.asax.cs中的Application_Start())顯示模式的代碼:

DisplayModeProvider.Instance.Modes.Insert(0, new DefaultDisplayMode("mobile") 
{ContextCondition = Context =>Context.Request.Browser["IsMobile"] == "True" 
}); 

這裏是顯示切換控制器動作的代碼:

public class ViewSwitcherController : Controller 
{ 
    public RedirectResult SwitchView(bool mobile, string ReturnUrl="/Login/Login") 
    { 
     // If the mobile user has requested to view the mobile view 
     // remove any overridden user agent for the current request 
     if (Request.Browser.IsMobileDevice == mobile) 
      HttpContext.ClearOverriddenBrowser(); 
     else 
      // Otherwise override the browser setting to desktop mode 
      HttpContext.SetOverriddenBrowser(mobile ? BrowserOverride.Mobile : BrowserOverride.Desktop); 

     return Redirect(ReturnUrl); 
    } 

} 

這裏是代碼在視圖切換到桌面視圖:

@Html.ActionLink("Desktop view", "SwitchView", "ViewSwitcher", new { mobile = false, ReturnUrl = Request.Url.PathAndQuery }, new { rel = "external" }) 

請讓我知道如果我錯過了事端G。

在此先感謝。

回答

1

對不起,我的拖延已久的答案。

以下解決方案由51Degrees的開發人員之一提供:

DisplayModeProvider.Instance.Modes.Insert(0, new DefaultDisplayMode("mobile")    
{ 
ContextCondition = Context => Context.GetOverriddenBrowser()["IsMobile"] == "true" 
}); 

因此用Context.GetOverriddenBrowser()[「IsMobile」]替換Context.Request.Browser [「IsMobile」]修復了我的問題。

希望有所幫助。

0

我知道這有點過時,但我今晚遇到了這個。同樣的症狀。沒有Mobi51的作品,沒有。我的工作理論是,Mobi51讓Request.Browser.IsMobileDevice感動,並且它控制了該屬性並設置了它的值,而不管你期望.NET如何處理它。

我目前的解決方案是這樣的。當我檢查我的viewstart文件切換佈局時,我檢查均爲Request.Browser.IsMobileDeviceContext.GetOverridenBrowser()。IsMobileDevice爲真。

當它是真正的移動,這兩個將是真實的。當它是真正的桌面時,兩者都是錯誤的。當它是一個請求桌面的移動視圖時,Request.Browser.IsMobileDevice將爲true(因爲Mobi51會這麼說)和Context.GetOverridenBrowser()。IsMobileDevice將是錯誤的。這裏是我的viewstart

@{ 
Layout = Request.Browser.IsMobileDevice && Context.GetOverriddenBrowser().IsMobileDevice 
     ? "~/Views/Shared/_LayoutMobile.cshtml" 
     : "~/Views/Shared/_Layout.cshtml";   
} 

我仍然在審查這一點,必須桌面添加到移動交換仍然(我已經可以看到一個問題,但這種變化使這個方向的工作,以及是很容易的,但在我的測試五分鐘到目前爲止今晚這已經奏效。我很好奇,如果你發現了另一個原因/方式與這個工作,或者,如果這個解決方案是給你滿意的。

+0

只要您使用Context.GetOverriddenBrowser() – user2027901