在上一篇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”就可以实现自定义的空控制器了。

MVC开发T4代码生成之二----vs模板扩展的更多相关文章

  1. MVC开发T4代码生成之一----文本模板基础

    T4文本模板 T4全写为Text Template Transformation Toolkit,是一种编程辅助工具,用来使程序代码自(懒)动(猿)生(福)成(利)的工具.MVC开发中大量使用了T4模 ...

  2. LibOpenCM3(二) 项目模板 Makefile分析

    目录 LibOpenCM3(一) Linux下命令行开发环境配置 LibOpenCM3(二) 项目模板 Makefile分析 LibOpenCM3 项目模板 项目模板地址: https://githu ...

  3. T4 模板 : 一种提升ASP.NET MVC开发速度方法

    最近由于需要在框架中提供一些自定义模板的功能,找到了一篇博客,可惜似乎是翻译工具直接翻的,读不通顺,就试着自己翻译下,我不会完全翻译原文的句子,可能会对原文进行小范围的我认为更合适的句子并添加些注释, ...

  4. ASP.Net MVC开发基础学习笔记:五、区域、模板页与WebAPI初步

    一.区域—麻雀虽小,五脏俱全的迷你MVC项目 1.1 Area的兴起 为了方便大规模网站中的管理大量文件,在ASP.NET MVC 2.0版本中引入了一个新概念—区域(Area). 在项目上右击创建新 ...

  5. ASP.Net MVC开发基础学习笔记(5):区域、模板页与WebAPI初步

    一.区域—麻雀虽小,五脏俱全的迷你MVC项目 1.1 Area的兴起 为了方便大规模网站中的管理大量文件,在ASP.NET MVC 2.0版本中引入了一个新概念—区域(Area). 在项目上右击创建新 ...

  6. Extjs 6 MVC开发模式(二)

    1.Extjs MVC开发模式 在JS的开发过程中,大规模的JS脚本难以组织和维护,这一直是困扰前端开发人员的头等问题.Extjs为了解决这种问题,在Extjs4.x版本中引入了MVC开发模式,开始将 ...

  7. 《ASP.NET MVC企业实战》(二) MVC开发前奏

    ​ 在上一篇“<ASP.NET MVC企业级实战>(一)MVC开发前奏”中记录了作者介绍的一些比较实用的VS使用方法以及C#2.0中添加的新特性.本篇继续大概了解之后版本的一些新特性.   ...

  8. 解析ASP.NET WebForm和Mvc开发的区别

    因为以前主要是做WebFrom开发,对MVC开发并没有太深入的了解.自从来到创新工场的新团队后,用的技术都是自己以前没有接触过的,比如:MVC 和EF还有就是WCF,压力一直很大.在很多问题都是不清楚 ...

  9. 解析ASP.NET Mvc开发之查询数据实例

    目录: 1)从明源动力到创新工场这一路走来 2)解析ASP.NET WebForm和Mvc开发的区别 ------------------------------------------------- ...

随机推荐

  1. centos 6.5 安装redis

    1. 下载redis,编译安装 下载地址:https://redis.io/download(建议大家都选择稳定版本) 下载到本地,然后上传到集群 当然也可以通过命令行直接在线下载 $ wget ht ...

  2. udt的java实现

    udt协议是什么? 我就不回答了,可以网上搜索,一直都是c++的,java的实现已经很久没有修改了 经过测试,java版本有些一问题,现在已经将其修复,已经上传到csdn 另外自己根据实际的应用,再次 ...

  3. React面试题

    React 简述下React的生命周期,性能优化在哪个生命周期,ajax操作在哪个生命周期 React中key的作用是什么 什么是虚拟DOM diff算法原理 React中refs的作用是什么

  4. oracle填坑之PLSQL中文显示为问号

    刚入坑oracle就遇到个坑. 坑描述: 系统:Windows7 oracle:同时安装,11g和12c(安装顺序,先装的12c然后装的11g) 坑:开始安装的12c用SQL Developer使用本 ...

  5. 使用K-means进行聚类,用calinski_harabaz_score评价聚类效果

    代码如下: """ 下面的方法是用kmeans方法进行聚类,用calinski_harabaz_score方法评价聚类效果的好坏 大概是类间距除以类内距,因此这个值越大越 ...

  6. run in thread

    def run_in_thread(runnable, is_daemon=True): server_thread = Thread(target=runnable) server_thread.s ...

  7. python———day03

    一.字符串格式化输出: 占位符    %s(字符串) %d(整数) %f(浮点数,约等于小数) name = input("Name:") age = input("Ag ...

  8. Jmeter学习记录

    JSON正则表达式提取规则 https://www.cnblogs.com/hc1020/p/7723720.html Jmeter非GUI下执行日志 执行命令 ./jmeter  -n  -t  $ ...

  9. 深度原理与框架-图像超分辨重构-tensorlayer

    图像超分辨重构的原理,输入一张像素点少,像素较低的图像, 输出一张像素点多,像素较高的图像 而在作者的文章中,作者使用downsample_up, 使用imresize(img, []) 将图像的像素 ...

  10. Python conda安装 并安装Tensorflow

    Python conda安装 1: 官网下载3版本 Anaconda2-2018.12-Windows-x86_64.exe, 安装完后配置环境变量 用户变量->PATH 编辑新增路径 C:\P ...