动软模板使用流程

模板的大体分为5块内容:模板指令声明,代码语句块,表达式块,类功能控制块,文本块输出。下面我们分别来介绍一下这5块内容的语法和使用说明。

  1. 模板指令声明块 <#@  #>

和ASP.NET页面的指令一样,它们出现在文件头,通过<#@…#>表示。其中<#@ template …#>指令是必须的,用于定义模板的基本属性。

(1)    模板指令

<#@ template [language="VB"] [hostspecific="true"] [debug="true"] [inherits="templateBaseClass"] [culture="code"] [compilerOptions="options"] #>

例如

<#@ template language="C#v3.5" hostSpecific="true" debug="true" #>

Language  这里可以指定模板使用的语言。

hostSpecific="true" 表示是否使用特定的host,host里面包含了模板使用的各种对象。

注意

所有属性值必须用双引号都括起来。如果值本身包含引号,则必须使用 \ 字符对这些引号进行转义。 指令通常是模板文件或包含的文件中的第一个元素。

 

(2)    参数指令

<#@ parameter type="Full.TypeName" name="ParameterName" #>

 

(3)    输出指令

<#@ output extension=".fileNameExtension"  encoding="encoding"  #>

  • output extension=".cs"   指定生成文件的扩展名。

encoding="encoding"    指定生成文件的编码。

 

(4)    程序集指令

<#@ assembly name="System.Data" #>

用于添加程序集引用,如果要使用第三方程序集,那么最好在项目中添加引用。

注:您应使用绝对路径的名称,或者路径名称中使用标准的宏的名称。

例如: <#@ assembly name="$(SolutionDir)library\MyAssembly.dll" #>

 

(5)    导入指令

<#@ import namespace="System.Data" #>

导入要使用的命名空间,注意:这里的命名空间必须要在前面指定的程序集里面找得到的,比如我指定命名空间"System.Data","System.Data.Common",这些在程序集System.Data中都有的

 

(6)    包含指令

<#@ include file="test.tt" #> 导入模板,类似Html的include用法

include 指令插入其他模板文件的文本。

例如,下面的指令插入 test.txt 的内容。 <#@ include file="c:\test.txt" #>

在处理时,被包含内容就像是包含文本模板的组成部分一样。 不过,即使 include 指令后跟普通文本块和标准控制块,也可以包含编写有类功能块 <#+...#> 的文件

 

  1. 代码语句块: <#   #>

在模板文件中,可以混合使用任意数量的文本块和标准控制块。中间是一段通过相应编程语言编写的程序调用,我们可以通过代码语句快控制文本转化的流程。

注意:不能在控制块中嵌套控制块。

<#@ output extension=".txt" #>

<#

    for(int i = 0; i < 4; i++)

    {

#>

 Hello!

<#

    }

#>

 

 

  1. 表达式块:<#=  #>

表达式控制块计算表达式并将其转换为字符串。 该字符串将插入到输出文件中。

例如: <#= 2 + 3 #>

表达式可以包含作用域中的任何变量。 例如,下面的块输出数字行:

<#@ output extension=".txt" #>

<#

    for(int i = 0; i < 4; i++)

    {

#>

This is hello number <#= i+1 #>: Hello!

<#

    }

#>

 

 

  1. 类功能控制块:<#+  #>

如果文本转化需要一些比较复杂的逻辑,我们需要写在一个单独的辅助方法中,甚至是定义一些单独的类,我们就是将它们定义在类特性块中。类功能控制块定义属性、方法或不应包含在主转换中的所有其他代码。 类功能块常用于编写帮助器函数。 通常,类功能块位于单独的文件中,这样它们可以包含在多个文本模板中。 类功能控制块以 <#+ ... #> 符号分隔。

例如,下面的模板文件声明并使用一个方法:

<#@ output extension=".txt" #>

Squares:

<#

    for(int i = 0; i < 4; i++)

    {

#>

    The square of <#= i #> is <#= Square(i+1) #>.

<#

    }

#>

That is the end of the list.

<#+  // Start of class feature block

private int Square(int i)

{

    return i*i;

}

#>

 

类功能必须编写在文件末尾。不过,即使 include指令后跟标准块和文本,也可以 <#@include #> 包含类功能的文件。例如下面代码则会报错:

List of Squares:

<#

   for(int i = 0; i < 4; i++)

   {  WriteSquareLine(i); }

#>

End of list.

<#+  // Class feature block

private void WriteSquareLine(int i)

{

#>

   The square of <#= i #> is <#= i*i #>.

<#  

}

#>

摘要:http://www.maticsoft.com/help/Template.htm#_Toc292191122  

posted on 2019-10-16 17:48  码农弟  阅读(128)  评论(0编辑  收藏  举报