我一直在使用ASP.net MVC 4的新显示模式功能,您可以将.Mobile附加到显示页面(Index.Mobile.cshtml),它将为移动设备呈现移动版本。是否可以为不同的用户代理提供不同的控制器?像HomeController.Mobile.cs之类的东西?我试过这个,但它不起作用。编译器希望HomeController.cs和HomeController.Mobile.cs是部分的。
我知道我可以创建移动区域并将所有移动流量重定向到该区域,因此移动设备将拥有自己的控制器。但是,我更喜欢像HomeController.Mobile.cs这样的东西,因此它可以提供更清晰的代码库。否则,使用ASP.net 4的显示模式,移动版本和页面的Web版本将具有相同的控制器逻辑,并不总是需要。有关如何做到这一点的任何想法?
答案 0 :(得分:6)
文件名对于类没有任何意义,所以我不确定你想要使用“HomeController.Mobile.cs”的想法。你不能有两个同名的HomeController类,所以它可以是独立的控制器/区域/应用程序,也可以是共享的。如你所说。
如果你使用默认约定并拥有相同的控制器,你可以根据设备类型分叉你的逻辑:
if (HttpContext.GetOverriddenBrowser().IsMobileDevice)
{
//mobile specific logic
}
如果您发现许多控制器/操作具有不同的逻辑,具体取决于设备类型,那么我认为您有单独的应用程序并且它 有意义使用如果需要,一个区域甚至一个单独的Web应用程序,恕我直言。我试着根据这个来决定我走的路。
编辑以解决评论:
我明白你想要的东西;当我尝试制作jQuery Mobile版本的博客时,我不得不做类似的事情。基本上,我认为有3种选择:
听起来你不想要#2或#3,所以你考虑过#1?移动设备的瓶颈在于它的资源和网络,所以如果你的服务器必须做“额外”的工作来获取移动视图永远不会呈现的一些数据,我就不会太担心。