0

我为移动设备和桌面设备创建了一个 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 格式。任何帮助将不胜感激,谢谢。

4

2 回答 2

4

我参加聚会可能有点晚了,但我遇到了和 OP 一样的问题,并且不喜欢 Tieson 的解决方案。所以我想出了一个替代方案,对我来说效果很好。

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

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

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

于 2013-09-05T12:26:14.793 回答
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”。

于 2013-04-24T22:14:04.720 回答