ASP.NET MVC 3预览版

    ASP.NET MVC 3的第一个预览版已经发布了,此次的更新带来了更多的改进。包括视图、控制器以及JavaScript和AJAX 方面的改进。 

    ASP.NET MVC 3与ASP.NET MVC 2是兼容的——这也就是说,当MVC 3发布后,它便于你把MVC 2的项目更新到MVC 3上。MVC 3的新功能是建立在MVC 1和MVC 2基础之上的,这也就意味着,你所掌握的技术,知识,类库和书籍可以直接用到MVC 3上的。MVC 3只是加了些新的功能—不会淘汰现有的功能。

    ASP.NET MVC 3 可以和ASP.NET MVC 2共存,你可以在机器上安装今天的“Preview 1”版本,而不会影响到你现有的MVC 2项目(除非你显式指定项目使用MVC 3,否则,它还是继续使用MVC 2)。当你安装完“Preview 1”版本后,会在Visual Studio 2010的“新建项目”对话框添加一些新的ASP.NET MVC 3模板—选中其中一个就会为你创建使用MVC 3的项目。

    下面是关于 “Preview 1”版本一些新功能的详细介绍。除非我特别说明,所有我这里介绍的功能在你今天可以下载和使用的预览版本上都是可用的。将来还会根据你的反馈,有更多的新功能会随着后续预览版本的发布而出现。

    视图方面的改进

    ASP.NET MVC 3 “Preview 1” 在视图方面的做了很多的改进。

    添加→视图对话框

    在“Preview 1”版中包括了一个新的“添加→视图”对话框,这个对话框便于你创建视图模板文件时选择要用的语法。它可以让你选择任何一个在你的机器上安装的视图引擎—让你使用任何一个你感觉自然的视图模板。

    clip_image002

    现在已经有很多非常不错的开源视图模板引擎(包括Spark, NHaml, NDjango,还有一些其它的)—我们可以如今可以更方便把它们集成到Visual Studio中来。

    在今天的ASP.NET MVC 3 “Preview 1”版本中,新建视图对话框里已经有两个自带的视图引擎:ASPX 和 Razor。

    新的“Razor”视图引擎

    这是网上创建一个在线商店网站的实例,它列出产品类别,然后允许访问者通过点击这些类别来查看相关的产品。

    clip_image004

    下面是StoreController类,它实现了创建上述场景的两个执行函数(“Index”和 “Browse”)。

    clip_image006

    我们将使用“Razor”视图引擎来实现StoreController的视图模板。

    下面就是定义我们通用布局的“Layout.cshtml”布局页面。“RenderBody()”方法用来指定在基于这个主布局页面的视图模板中填入内容的地方。

    clip_image008

    下面是Index执行函数的视图模板。它是基于上面提到的布局页面,然后输出一个产品类别名称的<ul>列表。

    clip_image010

    上面的模板中,用Html.ActionLink()这个标准的ASP.NET MVC 辅助函数去生成一个指向我们StoreController类中“Browse” 执行函数的链接。所有在ASP.NET MVC中现存的HTML 辅助函数都是可以用在“Razor”视图中—这一点不但适用于ASP.NET MVC内置的HTML辅助函数,也适用于其他人开发的辅助函数(包括其他公司或个人和MvcContrib项目里的)。

    下面是给Browse执行函数创建的视图模板。它列出了一个类别下的产品。

    clip_image012

    注意上面我们在foreach语句中使用其Model属性,获取传入Controller的强类型的产品列表的方式。这跟我们在.aspx视图页面的方法一样。Razor也支持我们通过“View”属性来获取传入视图页面的无类型“ViewData”。“View”是一个动态属性(这是一个.NET 4的新功能)—这给我们一种很简洁轻便的语法来访问视图数据(ViewData)。这样我们只需写View.Category,而不是ViewData[“Cateogry”]。

    全局过滤器

    ASP.NET MVC 支持通过过滤机制来描述性地应用“横切”逻辑。 你可以使用属性语法为控制器和执行函数指定过滤器,如下所示

    clip_image016

    程序开发者常常希望将一些过滤器逻辑应用于程序中的所有控制器上。 现在ASP.NET MVC3 能够让你指定一个全局的过滤器,这个过滤器可以应用于程序中的所有控制器。你可以通过在RegisterGlobalFilters()函数中将它加入到GlobalFilters 集合中来实现这个目的,这个函数被包含在默认的Global.asax类模板中。(随后它会被Application_Start()函数调用)

    clip_image018

    在MVC3中,这个过滤器的判定逻辑非常灵活,你可以配置一个全局过滤器,使它只在某些条件符合的时候才启用(例如:启用调试,或者针对一个请求使用特定HTTP响应等等)。 过滤器可以从一个依赖注入(DI-Dependency Injection)容器中获取。

posted @ 2010-08-17 09:04  VS小米渣  阅读(1148)  评论(3编辑  收藏  举报