【问题标题】:MVC4 Force Mobile Site for all requests including Desktop适用于所有请求的 MVC4 Force 移动站点,包括桌面
【发布时间】:2013-04-18 10:32:48
【问题描述】:

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

【问题讨论】:

  • 如果“桌面”版本准备就绪还需要一段时间,您总是可以克隆项目,重命名移动视图以删除名称中的 .mobile 部分,然后部署它...
  • 感谢您的建议,虽然我不想让它成为一个纯粹的移动项目,因为桌面版本已经有大量工作。我刚刚将视图切换器链接添加到所有桌面页面,这可以满足我的需要。

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


【解决方案1】:

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

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

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

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

【讨论】:

  • 这正是我想要的!不幸的是,我不再需要这个,但会记住它以备不时之需,谢谢!
【解决方案2】:

我想另一种尝试是在您从控制器操作返回结果时手动指定移动视图。 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”。

【讨论】:

    猜你喜欢
    • 2017-07-11
    • 2013-04-19
    • 1970-01-01
    • 1970-01-01
    • 2020-06-15
    • 1970-01-01
    • 1970-01-01
    • 2016-08-22
    • 2013-04-03
    相关资源
    最近更新 更多