第10周NuGet包——ASP.NET MVC 3最新移动视图引擎,与ASP.NET MVC 4兼容
[原文发表时间] 2011-09-05 22:26
我在2009年为Mix做了ASP.NET MVC的基础移动视图引擎,然后在2010年创建了我认为的更好的ASP.NET MVC移动视图引擎。遗憾的是,第二个(就是“更好的”那个)有一个缓冲bug,只出现在发布模式中。上个月,Jon,John,Peter和我用Razor以及一系列其他新功能更新了MVC 3版地NerdDinner。其中一个新功能就是jQuery的移动支持,但这也意味着我们得修复这个移动视图引擎。此外,ASP.NET MVC 4也会包含实际移动引擎支持,所以压力实在很大。
尽管如此,我们想确保任何新的MVC 3移动视图示例能与ASP.NET MVC 4所用的任何架构兼容。我提议的视图引擎最初的文件夹排版是根据文件夹来的,不过最终的设计使用的是文件名称。这就意味着你要用的是~/Views/Home/Index.Mobile.cshtml而不是~/Views/Home/Mobile/Index.cshtml。当然如果你想用自己的,你可以自行改变,不过默认是那样的。
Peter Mourfield 后来加入并更新了移动视图引擎,亲爱的读者,我们已经为你们放到了NuGet上。
记住,这些都是针对ASP.NET MVC 3的。当ASP.NET MVC 4出来的时候,你就不需要这些了,总的概念就是你得移除Razor(或者Web窗体)视图引擎,然后用移动版本来替换,这个集合了超多功能。
1: ViewEngines.Engines.Remove(ViewEngines.Engines.OfType<RazorViewEngine>().First());
2: ViewEngines.Engines.Add(new MobileCapableRazorViewEngine());
3: ViewEngines.Engines.Remove(ViewEngines.Engines.OfType<WebFormViewEngine>().First());
4: ViewEngines.Engines.Add(new MobileCapableWebFormViewEngine());
你可以在Application_Start中做这些,或者用像MobileViewEngines.Razor.Samples这样的Web激活器来做。NuGet包包括了VB和C#示例,所以你可以删除你不用的那个。你只要使用你需要的视图引擎就好,所以如果你使用的不是Web窗体,那就不用管这几行了。
Peter做的整个视图引擎只有81行代码,所以你可以根据自己的口味来进行改变。Peter和我把源代码放在BitBucket上了,以便修改,分布,和修复。
只要在你的视图中加入移动,比如Index.Mobile.cshtml或者Details.Mobile.aspx,当移动浏览器检测到这些时,它们就会被使用。检测的方法是使用ASP.NET调用标准的Browser.IsMobileDevice,所以你应该考虑使用像https://51degrees.mobi(还有CodePlex上和NuGet)这样的浏览器数据库。
记住,这个成品很干净(不是从ASP.NET4继承来的),只有基本的移动视图重载。我很高兴它没有出现我之前那个发布模式的bug,我们把现在用的这个成品放在了https://nerddinner.com上。如果你需要多移动视图(比如iPhone,黑莓等)的高级支持,你可以修改源代码,不用只关注这个。还有一些这个基础视图引擎没有的功能,像解决其他更复杂的方案的ASP.NET MVC 4或其他同事的成品,包括:
· 浏览器重写:强迫或“退出”移动和使用桌面
· 特定设备的自定义布局
不管怎样,我们觉得它在 NerdDinner上很简单好用,希望对你也有用。
相关链接
· NuGet上的ASP.NET MVC 3 移动视图引擎 ——“移动视图引擎”
· 移动视图引擎Razor示例——“移动试图引擎Razor样本”
· 51Degrees – 我喜欢的ASP.NET支持的移动浏览器数据库“51degrees.mobi”,
WURFL – 移动浏览器设备数据库ASP.NET API