asp.net mvc 4显示模式和控制器

时间:2012-03-30 16:42:42

标签: asp.net-mvc-4

我一直在使用ASP.net MVC 4的新显示模式功能,您可以将.Mobile附加到显示页面(Index.Mobile.cshtml),它将为移动设备呈现移动版本。是否可以为不同的用户代理提供不同的控制器?像HomeController.Mobile.cs之类的东西?我试过这个,但它不起作用。编译器希望HomeController.cs和HomeController.Mobile.cs是部分的。

我知道我可以创建移动区域并将所有移动流量重定向到该区域,因此移动设备将拥有自己的控制器。但是,我更喜欢像HomeController.Mobile.cs这样的东西,因此它可以提供更清晰的代码库。否则,使用ASP.net 4的显示模式,移动版本和页面的Web版本将具有相同的控制器逻辑,并不总是需要。有关如何做到这一点的任何想法?

1 个答案:

答案 0 :(得分:6)

文件名对于类没有任何意义,所以我不确定你想要使用“HomeController.Mobile.cs”的想法。你不能有两个同名的HomeController类,所以它可以是独立的控制器/区域/应用程序,也可以是共享的。如你所说。

如果你使用默认约定并拥有相同的控制器,你可以根据设备类型分叉你的逻辑:

if (HttpContext.GetOverriddenBrowser().IsMobileDevice)
{
    //mobile specific logic
}

如果您发现许多控制器/操作具有不同的逻辑,具体取决于设备类型,那么我认为您有单独的应用程序并且它 有意义使用如果需要,一个区域甚至一个单独的Web应用程序,恕我直言。我试着根据这个来决定我走的路。

编辑以解决评论:

我明白你想要的东西;当我尝试制作jQuery Mobile版本的博客时,我不得不做类似的事情。基本上,我认为有3种选择:

  1. 具有一组逻辑的控制器,用于检索所有视图的所有数据。每个视图都只使用它所需的内容。
  2. 具有“if(isMobile)”的控制器执行某些逻辑并在移动设备的情况下返回移动视图,并执行不同的逻辑并返回其他逻辑中的默认视图。
  3. 明确用于移动设备的完全独立的区域或应用程序(例如,mobile.yourapp.com)
  4. 听起来你不想要#2或#3,所以你考虑过#1?移动设备的瓶颈在于它的资源和网络,所以如果你的服务器必须做“额外”的工作来获取移动视图永远不会呈现的一些数据,我就不会太担心。