第10周NuGet包——ASP.NET MVC 3最新移动视图引擎,与ASP.NET MVC 4兼容

[原文发表地址] NuGet Package of the Week #10 - New Mobile View Engines for ASP.NET MVC 3, spec-compatible with 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。当然如果你想用自己的,你可以自行改变,不过默认是那样的。

clip_image001

clip_image002

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上了,以便修改,分布,和修复。

clip_image003

只要在你的视图中加入移动,比如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