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
对于可能存在的任何嵌套布局“递归”。
覆盖RazorViewEngine
的CreateView
方法是否足够?它需要一个masterPath
参数,所以也许我可以实现一个自定义RazorViewEngine
并覆盖这个方法,对吧?
第二个问题是关于移动浏览器检测。我不太关心特定设备。我只是想将桌面与移动设备区分开来。在这种情况下,像 WURFL
这样的东西是必要的吗?
检查Request.Browser.ScreenPixelsWidth
和ScreenPixelsHeigth
之类的内容是否荒谬? (因为我要改变的大多数是使用或不使用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 数据传递