ASP.NET MVC 3 上的移动访问者的动态布局?

Posted

技术标签:

【中文标题】ASP.NET MVC 3 上的移动访问者的动态布局?【英文标题】:Dynamic layout for mobile visitors on ASP.NET MVC 3? 【发布时间】:2012-05-08 17:33:43 【问题描述】:

我想根据用户是否从移动设备访问网站来动态更改布局。我有几个关于这个主题的问题。

    一旦确定布局,但在呈现视图之前,我想更改布局。也就是说,我可以使用一些钩子来将layout.cshtml 更改为layout.mobile.cshtml 对于可能存在的任何嵌套布局“递归”。

    覆盖RazorViewEngineCreateView 方法是否足够?它需要一个masterPath 参数,所以也许我可以实现一个自定义RazorViewEngine 并覆盖这个方法,对吧?

    第二个问题是关于移动浏览器检测。我不太关心特定设备。我只是想将桌面与移动设备区分开来。在这种情况下,像 WURFL 这样的东西是必要的吗?

    检查Request.Browser.ScreenPixelsWidthScreenPixelsHeigth 之类的内容是否荒谬? (因为我要改变的大多数是使用或不使用jQuery.mobile,它是数据属性。

【问题讨论】:

【参考方案1】:

此功能内置于 ASP.NET MVC 4 中,因此您可以开箱即用。

Scott Hansleman blogged 关于如何在 ASP.NET MVC 3 中实现相同功能并为升级做好准备,因为他建议的 NuGet 与 ASP.NET MVC 4 规范兼容。

【讨论】:

【参考方案2】:

如果可以,请使用 Darin Dimitrov 指出的 ASP MVC 4。它开箱即用地支持这一点。

如果您卡在 MVC 3 上,以下是我们在产品中的做法:

1) 安装 WURFL

2) 实现一个调用 WURFL 并解析设备能力的 HttpCapabilitiesProvider;东西解决了结果。一定要添加一个名为 isMobileBrowser 的属性(wurfl 公开了这个)

3) 告诉 .NET 使用您的功能提供程序而不是默认的 HttpCapabilitiesBase.BrowserCapabilitiesProvider = new YourBrowserCapabilitiesProvider(_wurflManager);

4) 创建一个 CustomViewEngine(继承 RazorViewEngine)。覆盖 FindPartialView 和 FindView。这些应该查看 controllerContext.RequestContext.HttpContext.Request.Browser.Capabilities["isMobileBrowser"] 并映射到适当的名称,例如 myView.cshtml.mobile。您需要同时解析 viewName 和 masterName。

4.1) 仍在 CustomViewEngine 的 FindPartialView 和 FindView 中,搜索搜索 ~/Views/0/1 和 ~/Views/Shared/0/1 其中 0 是控制器(controllerContext.RouteData .GetRequiredString("controller")) 和 1 是您的映射视图名称

4.2) Return return new ViewEngineResult(CreateView(controllerContext, viewPath, masterPath), this);

【讨论】:

以上是关于ASP.NET MVC 3 上的移动访问者的动态布局?的主要内容,如果未能解决你的问题,请参考以下文章

用户访问页面时如何动态缩放整个 ASP.Net MVC 应用程序

asp.net MVC动态路由

在 ASP.NET MVC 3 中发布动态表单

七天学会ASP.NET MVC ——ASP.NET MVC 数据传递

Wordpress 类似于 ASP.NET MVC2/3 或 ASP.NET 4.0 中的动态永久链接

asp.net mvc 3 和动态视图生成