MVC开发T4代码生成之二----vs模板扩展
2018-06-22 06:10:23来源:未知 阅读 ()
在上一篇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”就可以实现自定义的空控制器了。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:支付宝PC网站接口对接
下一篇:MVC Areas
- Asp.net MVC SignalR来做实时Web聊天实例代码 2020-03-29
- ASP.NET MVC中jQuery与angularjs混合应用传参并绑定数据 2020-03-29
- ASP.NET MVC Admin主页快速构建 2020-03-23
- Asp.Net MVC4通过id更新表单内容的思路详解 2020-03-19
- 为你介绍asp.net的执行事务代码 2020-03-18
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash
