2013-04-18 34 views
0

我已經爲移動和桌面設備創建了MVC 4互聯網應用程序項目。 現在我只想在全球範圍內爲所有瀏覽器顯示移動網站。MVC4強制移動站點的所有請求,包括桌面

我一直在嘗試使用代碼HttpContext.SetOverriddenBrowser(BrowserOverride.Mobile)來做到這一點,但無論我把它放在哪裏,它都無法正常工作。

目前我可以使用ViewSwitcher從桌面站點切換到移動站點,但這是不切實際的,因爲桌面站點尚未運行。

public RedirectResult SwitchView(bool mobile, string returnUrl) { 
    if (Request.Browser.IsMobileDevice == mobile) 
     HttpContext.ClearOverriddenBrowser(); 
    else 
     HttpContext.SetOverriddenBrowser(mobile ? BrowserOverride.Mobile : BrowserOverride.Desktop); 

    return Redirect(returnUrl); 
} 

我的所有移動視圖均爲VIEWNAME.Mobile.cshtml格式。任何幫助將不勝感激,謝謝你。

+0

如果在「桌面」版本準備就緒之前需要一段時間,您可以隨時克隆項目,重命名移動視圖以刪除名稱中的「.mobile」部分,然後部署該部分... –

+0

感謝您的建議,儘管我不想讓它成爲一個純粹的移動項目,因爲桌面版本已經有了重要的工作。 我剛纔將視圖切換器鏈接添加到了所有桌面頁面,這適用於我需要的內容。 –

回答

4

我可能對晚會有點遲,但我有類似OP的問題,不喜歡泰森的解決方案。所以我想出了一個替代方案,這對我非常有用。

下面的代碼添加到您的項目的Global.asax.cs

protected void Application_BeginRequest() 
{ 
    Request.RequestContext.HttpContext.SetOverriddenBrowser(BrowserOverride.Mobile); 
} 

這告訴ASP.NET上的要求,這是一個移動瀏覽器的請求。

+0

這正是我一直在尋找的!不幸的是,我不再需要這個,但將來會記住它,謝謝! –

0

我想嘗試一種不同的方法就是在從控制器操作返回結果時手動指定移動視圖。 View()有相當多的重載(請參閱http://msdn.microsoft.com/en-us/library/system.web.mvc.controller.view%28v=vs.100%29.aspx),其中一個允許您指定要呈現的視圖:return View("index.mobile", model)應該可以工作。一旦應用程序的其餘部分完成,一個簡單的Find + Replace將允許您刪除「黑客」。