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