2013-05-22 7 views
1

저는 51Degrees (Lite)를 사용하여 장치를 감지하고 이에 따라 모바일 (.mobile.cshtml) 또는 데스크톱 ( .cshtml)보기를 선택한 MVC4 응용 프로그램이 있습니다. 51 일은 그 일을 제대로 할 수 있습니다. 그러나 HttpContext.SetOverriddenBrowser (BrowserOverride.Desktop)을 사용하여 모바일에서 데스크톱보기 (모바일 장치)로 전환하려는 경우 작동하지 않습니다. 참고로, 51Degrees없이 작동합니다. 여기뷰 스위치가 51Degrees와 호환되지 않습니다.

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); 
    } 

} 

가있다 : 여기

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

뷰 스위처 컨트롤러 동작 코드이다 : 여기

은 (Global.asax.cs에서 위해 Application_Start()) 디스플레이 모드를 선택하기위한 코드이고 데스크톱보기로 전환하는보기의 코드 :

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

내가 뭔가를 잃어버린 경우 알려주십시오. 지.

미리 감사드립니다.

답변

1

오랫동안 지연된 대답은 죄송합니다.

다음 솔루션은 51Degree에서 개발자 중 한 명이 제공했습니다.

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

그래서 Context.GetOverriddenBrowser() [ "IsMobile"]로 Context.Request.Browser [ "IsMobile"]를 바꾸면 내 문제가 해결됩니다.

희망이 있습니다.

0

나는 이것이 약간 날짜가다는 것을 알고있다, 그러나 나는이 오늘 밤 만났다. 같은 증상. Mobi51없이 작동하지 않습니다. 제 작업 이론은 Request.Browser.IsMobileDevice가 Mobi51에 의해 영향을 받았으며 .NET이이 것을 수행 할 것으로 기대하는 것에 상관없이 그 속성을 제어하고 그 값을 설정한다는 것입니다.

현재 해결 방법은 다음과 같습니다. 내가 배치를 전환 내 viewstart 파일을 체크인 할 때 나는 것을 모두Request.Browser.IsMobileDeviceContext.GetOverridenBrowser(). IsMobileDevice에 해당하는 확인.

진정한 모바일 인 경우 두 가지 모두 사실입니다. 진정으로 데스크톱 일 때는 둘 다 틀립니다. 모바일보기에서 데스크톱을 요청하면 Request.Browser.IsMobileDevice가 true가되고 (Mobi51에서는 그렇게 표시되기 때문에) Context.GetOverridenBrowser(). IsMobileDevice는 false가됩니다. 여기 내 viewstart입니다

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

난 아직도이 신원 조회 여전히 (나는 이미 문제를 볼 수있는 모바일 전환에 바탕 화면을 추가 할 필요가 있지만, 변화는 그 방향으로 작업을 할뿐만 아니라 충분히 쉽지만에서 할 수있어 지금까지 테스트 한 지 5 분이 지났지 만, 다른 해결책을 찾거나이 솔루션이 만족 스럽다면 궁금합니다.

+0

해결책은 Context.GetOverriddenBrowser()를 사용하는 한 한 마디로해야합니다. – user2027901