【原文地址】ASP.NET MVC 1.0 Release Candidate Now Available
【原文发表日期】 Tuesday, January 27, 2009 12:13 PM

今天,我们发布了ASP.NET MVC 1.0 最终版的候选版本(简称RC)。 点击这里下载(注:该链接才上线,所以如果链接不工作的话,请等几分钟,让你访问的服务器有机会更新)。该版本可以在Visual Studio 2008和免费的Visual Web Developer 2008下工作。

今天的ASP.NET MVC RC版本是我们在发布最终的1.0版本前的最后一个公开版本。我们预计在下个月(【译注】,指2月份)发布ASP.NET MVC 1.0 的最终版。

除了缺陷修补外,今天的版本还包含了若干个新的功能。它还包含了基于客户反馈对现有功能的几个改善。请阅读随ASP.NET MVC下载一起发布的发布说明,以了解所有改动的完整细节。该发布说明也包含了如何把用ASP.NET MVC Beta版本建造的现有应用升级到RC版的详细指令。

Visual Studio工具方面的改进

RC版本包含了Visual Studio工具方面的几个新功能(是在beta版本提供的新功能之外的,在这里我就不讨论beta中的这些功能了),这些功能包括:

添加控制器的命令

你现在可以在ASP.NET MVC项目中间键入Ctrl-M, Ctrl-C,或者右击 /Controller 文件夹,然后选择“Add->Controller(添加控制器)”上下文菜单项来创建新的控制器类:

这会调出“添加控制器”对话框,允许你给要创建的控制器取名,以及表示你是否想自动地生成(scaffold)常见的CRUD方法:

点击“添加”按钮会生成一个控制器类,并将它加到项目中去:

添加视图的命令

你现在可以在一个控制器的action方法中键入Ctrl-M, Ctrl-V,或者在一个action方法中右击,选择“添加视图”上下文菜单项来生成新的视图模板:

这会调出“添加视图”对话框,允许你给要创建的新视图取名(其中预先填充了基于约定的选项)。它允许你创建“Empty(空白)”的视图模板,或者根据控制器的action方法传给视图的对象类型自动地生成或scaffold视图模板。脚手架(scaffolding)基础设施在生成视图模板时会使用反射,这样它可以基于传给它的任何POCO (plain old CLR object,普通的CLR对象)生成新的模板。它对任何特别的ORM或数据实现都没有依赖性。

例如,在下面,我们表示想要基于从上面的action方法中传入的Product对象序列生成一个“列表”视图模板:

点击“添加”按钮会在 \Views\Products\ 文件夹中生成一个视图模板,内含默认的“脚手架”实现:

然后,我们运行应用,并在浏览器中请求 /products URL,就会看到取出的产品列表:

RC版本发布了好几个内置的脚手架模板:“Empty(空白)”, “List(列表)”,“Details(细节)”,“Edit(编辑)”和“Create(创建)”(你也可以添加自己的脚手架模板,稍后会提供更多细节)。

例如,要支持产品编辑,我们可以象下面这样在Products控制器上实现“Edit” action方法的HTTP-GET版本,然后调用“添加视图”命令:

在“添加视图”对话框中,我们可以表示我们将把一个Product对象传给我们的视图,然后选择“Edit”模板选项来生成脚手架实现:

点击“添加”按钮会在 \Views\Products\ 文件夹中生成一个编辑视图模板,内含默认的脚手架实现:

然后,我们可以运行应用,在浏览器中请求/products/edit/1 URL,来编辑Product细节:

要保存编辑后的改动,我们可以在Products控制器中实现“Edit” action方法的HTTP-POST版本:

注意在上面的代码中,在出错的情形下(例如,有人给一个数字型的值输入了一个非法的字符串),我们是如何重新显示视图的。“Edit(编辑)”和“Create(创建)”脚手架模板包含了在这种情形发生时,为保留用户输入和用红字标志不合法的输入元素所需的HTML验证辅助方法:

你最终大概不会原封不动地使用脚手架生成的模板,经常会完全换掉这些模板。但能够得到一个初始的实现并能很快地运行起来,针对你的场景有一个你可以轻松细调的起始视图模板是非常有用的。

因为脚手架基础设施支持针对任何普通的CLR对象生成脚手架视图,你既可以将其用于领域模型对象(包括用LINQ to SQL, LINQ to Entities, nHibernate, LLBLGen Pro, SubSonic, 和其他流行的ORM实现映射的对象),也可以用于自定义的Presentation Model/ViewModel类。

添加和定制脚手架模板

ASP.NET MVC的脚手架基础设施是用Visual Studio内置的T4模板架构(Scott Hanselman 在这里有一篇关于T4的好博客)来实现的。

你可以定制/改动任何内置的ASP.NET MVC脚手架模板实现。你还可以创建另外的脚手架模板(例如,ScottGu Crazy Look脚手架选项),让它们在“添加视图”对话框中作为选项显示出来。

要在整个机器层次定制/添加脚手架模板,打开 “C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\ItemTemplates\CSharp\Web\MVC\CodeTemplates” 文件夹:

AddController 子文件夹包含了“添加控制器”对话框中的脚手架模板,而“AddView”子文件夹则包含了“添加视图”对话框中的脚手架模板:

填充在“添加视图”对话框中的脚手架模板只是带“.tt”文件扩展名的文本文件而已,这些“.tt” 文本文件包含了在模板被选中时会运行的行内C# 或 VB代码:

你可以打开和编辑任何现有的文件来定制默认的脚手架行为,你还可以添加新的“.tt”模板文件 -- 就象我在上面加的“Scott Crazy Look.tt”文件一样。在添加新的模板文件之后,“添加视图”对话框会更新,自动将其包括在可使用的脚手架选项列表之中:

除了在机器层次定制/添加模板文件外,你还可以在个别项目层次添加/改动这些模板文件,这还允许你将这些模板签入源码控制系统,在整个团队间轻松地使用它们。

你可以通过在项目下面加一个CodeTemplates文件夹,来在项目层次定制脚手架模板,然后你可以在其中建立“AddController”和“AddView”子文件夹:

你只要在项目中加一个同名的“.tt”文件,就可以覆盖任何一个默认的机器层次的模板文件。例如,在上面,我们覆盖了用在“添加控制器”场景中的默认“Controller.tt” 脚手架模板。

你可以将新的视图脚手架模板文件置于“AddView”文件夹中即可加入到列表中。例如,在上面,我们在项目中加了一个“Yet Another Crazy Look.tt” 视图模板。在使用“添加视图”对话框时,我们现在就会看到定义在机器和项目层次的所有模板的集合:

注: 当你将 “.tt”模板加到 \CodeTemplates 文件夹中时,确认在属性表格中将每个“.tt”模板文件的“Custom Tool(定制工具)”属性设成了空白字符串(否则的话,在运行时你会得到错误),你也许还需要关闭和重新打开项目以清除错误列表中会出现的一个伪错误。不久,我们将发表更多讨论创建/定制脚手架模板的博客贴子。%3