在上一篇MVC开发T4代码生成之一----文本模板基础中介绍了与T4模板相关的基础知识,并对MVC内使用T4模板添加视图做了介绍。知道了T4模板的使用后自然就想着怎么对vs自带的T4模板进行扩展,添加一些我们自定义的T4模板。有两种途径可以对vs的T4模板进行扩展:

a.直接在vs模板目录内(C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\Web\Mvc\Scaffolding\Templates\MvcView)添加,这种方法添加的 模板属于IDE级,可以应用在所有项目内;b.在项目内新建“CodeTemplates\MvcView”目录,在其中添加模板,这种方法添加的模板仅应用与所在项目。下面分别对这两种方法进行介绍。

在vs模板目录内添加T4模板

  这种添加很简单,只需将添加T4模板文件并按照文件命名规则命名就可以,C#的就以.cs.t4命名,vb的就以.vb.t4命名,添加完成后在vs模板内就多出了我们新添加的,例如我们在目录内新添加了一个Test.cs.t4模板,添加无需重启vs即可,并且添加的模板在所有项目内均可使用。

添加前后vs内模板变化如图所示:

  

  

在项目内新建“CodeTemplates\MvcView”目录添加模板

  有时我们希望建立一个仅用于项目内使用的T4模板,例如我们认为vs自带的List模板不适于项目,于是自定义了一个新的List模板,新的List模板仅用于当前项目,如果在vs目录内添加那我们就需要在新List模板文件名称上添加必要信息与原有List模板做区分,等时间长了添加多了后在vs内新建视图时就会出现一堆List模板,然后每次添加都要进行区分,显然这样很不明智,我们也不能随意替换或删除某个List模板,因为他们可能被其他项目使用了。

  建立仅用于项目内使用的T4模板步骤很简单,只需要在项目内添加“CodeTemplates\MvcView”目录结构,然后在其中添加T4模板即可,即使新添加的模板与vs目录内模板重名在使用时也会以项目内模板生成,此时也不会对vs目录内模板造成影响。需要注意的是目录结构必须与“CodeTemplates\MvcView”一致,另外如果新建T4模板需要使用vs自带的Imports和ModelMetadataFunctions模板文件时,新建T4模板相应的include指令要使用绝对目录或者把vs目录内的Imports和ModelMetadataFunctions模板文件复制到项目CodeTemplates\MvcView目录内。

  例如我们使用如下TestViewModel视图模型生成分布视图,TestViewModel内容如下:

public class TestViewModel
{
public string Name { get; set; }
public string Age { get; set; }
}

  首先使用vs自带的Create模板生成视图,生成视图时的对话框配置如下:

  生成的视图如下:

  然后我们在项目内新建“CodeTemplates\MvcView”目录结构,将vs目录内的Imports.include.t4和ModelMetadataFunctions.cs.include.t4模板文件复制到项目CodeTemplates\MvcView目录内,在项目内“CodeTemplates\MvcView”下新建文本文件并改名为Create.cs.t4,至于模板内容我们直接复制vs自带的Create.cs.t4内容将其中“<h4><#= ViewDataTypeShortName #></h4>“修改为”<h4><#= ViewDataTypeShortName #>---这是由项目内Create模板生成的视图</h4>“然后保存重新生成视图:

此时可以看到在模板选项内仅有一个Create模板,保持其他参数不变生成视图如下:

  后记

  最后再补充下为什么要严格遵守“CodeTemplates\MvcView”这一目录结构,很简单,因为我们是在扩展视图模板,打开C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\Web\Mvc\Scaffolding\Templates你会发现vs默认视图模板都在其下的MvcView目录内,也就是说“CodeTemplates\MvcView”是和“Templates\MvcView”相对应的,而Templates这个目录下还包含了其他模板,只要照着这种对应关系在项目建立模板就可以对其他模板进行扩展,例如在“Templates\MvcControllerEmpty”下有个“Controller.cs.t4”,她是我们新建空控制器的模板,在项目内建立“CodeTemplates\MvcControllerEmpty"目录,然后建立自己的“Controller.cs.t4”就可以实现自定义的空控制器了。

最新文章

  1. java sound初探
  2. Java基础高级一(正则表达式)
  3. SQL Server里面如何检查没有释放的游标
  4. light
  5. php字符串笔记
  6. js实现对移动设备的检测
  7. RPM命令学习
  8. IntelliJ中的main函数和System.out.println()快捷键
  9. Nginx Gzip 压缩配置
  10. 更有效率的使用Visual Studio(一)
  11. dojo.hitch 原理
  12. lunux下查看文件文件夹大小的命令
  13. 一个简单的带缓存http代理
  14. js判断数组里面的值是否相等。
  15. find的用法
  16. VS2015 + EF6连接MYSQL
  17. 常用的几个PHP加密函数
  18. C++类相关
  19. Caused by: java.net.ConnectException: Connection refused/Caused by: java.lang.RuntimeException: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
  20. 搭建一个Web Server站点

热门文章

  1. Java解析XML之Dom4j
  2. Android Studio 将文件打包成APK
  3. T4代码生成脚本从添加注释,添加命名空间开始(一款强大的代码生成工具从看懂脚本,到随心所欲的玩弄代码,本文只是T4的冰山一角,博主将不断深入探索并完善该文章)
  4. JAVA体系学习-导向
  5. 6.3 基于二分搜索树、链表的实现的集合Set复杂度分析
  6. vmvare使用桥接和NAT方式连接网络
  7. 数据库sql使用小结
  8. 微软Microsoft SQL server 之 MDS connection问题
  9. [Go] 开始试探一门新语言的五点思考 - Golang
  10. Win7 Win8 Win10取不到机器码的处理办法