C# MVC4强制移动站点处理所有请求,包括桌面请求

C# MVC4强制移动站点处理所有请求,包括桌面请求,c#,mobile,asp.net-mvc-4,C#,Mobile,Asp.net Mvc 4,我已经为移动设备和桌面设备创建了一个MVC4互联网应用程序项目。 现在我只想为所有浏览器全局显示移动站点 我一直在尝试使用代码HttpContext.setOverridedBrowser(browserverride.Mobile)来实现这一点,但无论我把它放在哪里,它似乎都无法正常工作 目前,我可以使用ViewSwitcher从桌面站点切换到移动站点,但这是不切实际的,因为桌面站点还不能正常工作 public RedirectResult SwitchView(bool mobile, st

我已经为移动设备和桌面设备创建了一个MVC4互联网应用程序项目。 现在我只想为所有浏览器全局显示移动站点

我一直在尝试使用代码
HttpContext.setOverridedBrowser(browserverride.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格式。非常感谢您提供的任何帮助。

我想尝试的另一种方法是在返回控制器操作结果时手动指定移动视图
View()
有很多重载(请参阅),其中一个重载允许您指定要渲染的视图:
返回视图(“index.mobile”,model)
应该可以工作。一旦应用程序的其余部分完成,一个简单的查找+替换将允许您删除“hack”。

我想另一个尝试方法是在您返回控制器操作的结果时手动指定移动视图
View()
有很多重载(请参阅),其中一个重载允许您指定要渲染的视图:
返回视图(“index.mobile”,model)
应该可以工作。一旦应用程序的其余部分完成,一个简单的查找+替换就可以让你删除“hack”。

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

将以下代码添加到projects Global.asax.cs:


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

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

将以下代码添加到projects Global.asax.cs:


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

如果“桌面”版本准备好之前需要一段时间,您可以随时克隆项目,重命名移动视图以删除
。mobile
名称的一部分,然后部署它…谢谢您的建议,虽然我不想让它成为一个纯粹的移动项目,因为桌面版本已经有了重要的工作。我刚刚将视图切换程序链接添加到所有桌面页面,这符合我的需要。如果在“桌面”版本准备就绪之前需要一段时间,您可以随时克隆项目,重命名移动视图以删除名称的
.mobile
部分,然后部署它…谢谢您的建议,虽然我不想让它成为一个纯粹的移动项目,因为桌面版本已经有了重要的工作。我刚刚在所有桌面页面添加了视图切换链接,这正是我所需要的!不幸的是,我不再需要这个了,但以后会记住的,谢谢!这正是我要找的!不幸的是,我不再需要这个了,但以后会记住的,谢谢!
protected void Application_BeginRequest()
{
    Request.RequestContext.HttpContext.SetOverriddenBrowser(BrowserOverride.Mobile);
}