明志唯新

ASP.NET MVC 中强类型 View 的 T4 模板的使用

发表于

现在 ASP.NET MVC 已经发布 MVC2 RC2 的版本,可以从 http://www.microsoft.com/downloads/details.aspx?FamilyID=7aba081a-19b9-44c4-a247-3882c8f749e3&displaylang=en 页面上下载,当然了这个安装程序是针对 VS2008 的。而 VS2010 的最新发布版本为 VS2010 RC 版,该版本中内置了较新版的 MVC2 框架,不必单独安装。

而我们使用过 ASP.NET MVC 的同学们呢,应该注意到 MVC2 中默认的强类型 View 模板跟之前的版本是不同的,主要原因是因为其对应的 T4 模板不同。如果有一个项目原来使用的 ASP.NET MVC1 开发的,现在要升级为 MVC2。该场景下你对原来的默认强类型 View 加入了一些 js 特效,若跟 HTML 结构有直接关系,那么升级到 MVC2 会有不兼容问题,原因是 MVC1 的 HTML 是每个 Model 属性用 <p></p> 包括的,而 MVC2 的则是两个 <div></div> 分别包括属性的显示名和相应的编辑空间或显示内容。那么我们如何快速解决这个问题呢?其实较为简单,操作如下

  1. 到您的 Visual Studio 安装目录中搜索一下 CodeTemplates,分别找到 MVC1 和 MVC2 对应的CodeTemplates\AddViews目录
  2. 将 MVC1 的 CodeTemplates\AddViews 中要用到 MVC2 的模板文件复制到 MVC2 的 CodeTemplates\AddViews 中,并修改相应的名称,甚至可以将类似 TextBox 方法改为 TextBoxFor 方法以提升性能,即可实现在该版本的 VS 中的所有 MVC2 项目的添加强类型 View 多出旧版 View 的支持。
  3. 如果只希望在当前的 MVC2 项目中能够创建旧版的强类型 View,则可在项目根目录下创建 CodeTemplates 目录,并在 CodeTemplates 下创建 AddViews 目录,再然后将类似上一步中的方式将对应 *.tt 文件复制到当前项目的 CodeTemplates\AddViews 中即可,而 VS 安装目录中的 MVC2 的 CodeTemplates\AddViews 则保持初始状态即可。
  4. 同样当有特殊的强类型 View 需求时,也可以自己创建一个 .tt 的 T4 模板文件添加到对应的 CodeTemplates\AddViews 目录中即可

需要注意的是当将 .tt 文件复制到 MVC 项目中的 CodeTemplates\AddViews 目录或其他任何目录时,VS 会有一个自动的执行过程,即自动在 .tt 下方生成一个新的同名 aspx 文件,这个文件对我们基本是无用的,所以删除即可。