Asp.net mvc 处理桌面和;ASP.NET MVC的一个实例中的移动控制器

Asp.net mvc 处理桌面和;ASP.NET MVC的一个实例中的移动控制器,asp.net-mvc,Asp.net Mvc,我希望我的网站能够提供来自同一ASP.NET MVC实例的移动版本和桌面版本 我将有两个主机名: & 我想让事情模块化,这意味着移动站点完全独立的控制器(而不仅仅是分割视图)。我很乐意将所有移动控制器命名为前缀为“M”,以避免重复的类名问题,即: MAccountController.cs AccountController.cs 我想为移动设备维护m.sitename.com/account/xURL,而不是/maccount/x .在我看来,有两种可能的方法可以很好地处理这个问题: 选项

我希望我的网站能够提供来自同一ASP.NET MVC实例的移动版本和桌面版本

我将有两个主机名:

&

我想让事情模块化,这意味着移动站点完全独立的控制器(而不仅仅是分割视图)。我很乐意将所有移动控制器命名为前缀为“M”,以避免重复的类名问题,即:

MAccountController.cs
AccountController.cs
我想为移动设备维护
m.sitename.com/account/x
URL,而不是
/maccount/x
.在我看来,有两种可能的方法可以很好地处理这个问题:

选项1:

所有移动链接都将是
/maccount/x
格式,但显示名称(在URL中)将是
/account/x

或:

选项2:

不知何故,我将我的移动控制器设置为只回答带有
http://m.sitename.com
格式,并且桌面控制器仅对
http://www.sitename.com
格式

选项2a。使用子分类,即
AccountController:DesktopController/MobileController

选项2b。控制器类本身的某种属性/属性


选项1或选项2是否可行?其中一个比另一个好吗?有更好的方法吗?

DisplayMode
是更好的方法。因为这是非常灵活的。有时你的网页在iphone中会有所不同。但你的选择1,2无法做到这一点。 在DisplayMode用法中:

你的正常观点是

/Views/Home/Default.aspx  //or Default.cshtml
移动视图是

/View/Home/Default.mobile.aspx  // or Default.mobile.cshtml
但路线是一样的

怎么做。 第一。在Global.asax中插入DisplayModePrivider

DisplayModeProvider.Instance.Modes.Insert(0, new
DefaultDisplayMode("iPhone")
{
    ContextCondition = (context => context.GetOverriddenUserAgent().IndexOf
        ("iPhone", StringComparison.OrdinalIgnoreCase) >= 0)
 });
第二。像这样使用

/View/Home/Default.iphone.aspx

如果你想要不同的路线。也许对您有帮助

我对这种切换机制的简单/优雅印象深刻,它也是一种快速的解决方案!不过,我担心操作方法中缺乏模块化,代码可能会变得凌乱,我确实希望保留我的模块化-呵呵,这是一个很好的解决方案!我想如果动作代码需要个性化,您可以创建一个不同的动作。我想知道操作是否有displayName属性。即显示URL(“登录”)而不是“MLogin”