适用于所有请求的MVC4强制移动站点,包括桌面

时间:2013-04-18 10:32:48

标签: c# mobile asp.net-mvc-4

我为移动和桌面设备创建了一个MVC 4 Internet应用程序项目。 现在我想在全球范围内为所有浏览器显示移动网站。

我一直在尝试使用代码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格式。非常感谢任何帮助,谢谢。

2 个答案:

答案 0 :(得分:4)

我可能有点迟到了,但我遇到了像OP一样的问题而且不喜欢Tieson的解决方案。所以我提出了一个替代方案,对我来说很有用。

将以下代码添加到项目 Global.asax.cs

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

这告诉ASP.NET 每个请求,这是移动浏览器的请求。

答案 1 :(得分: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将允许您删除“hack”。