0

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

我将有 2 个主机名:

http://m.sitename.com & http://www.sitename.com

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

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。使用子类化 IEAccountController : DesktopController/MobileController

选项 2b。Controller 类本身的某种属性/属性。

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

4

1 回答 1

1

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

如果你想要不同的路线。可能对你有帮助

于 2013-02-04T01:27:52.517 回答