Methods/functions 在 t4 模板中 return html
Methods/functions in t4 templates to return html
我有一个大型 t4 文本模板要生成 html。
t4 模板:
<#@ template language="C#" debug="true" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.Globalization" #>
<#@ parameter type="Transaction" name="transaction" #>
<#@ parameter type="System.Collections.Generic.Dictionary<string,string>" name="resources" #>
<html>
<p>test paragraph1 </p>
<# foreach (TransactionItem t in transaction) { #>
<p><#= t.Item #> <#= t.Price #></p>
<# } #>
<p>test paragraph2 </p>
<p>test paragraph3</p>
<p>
<#= this.GetClearanceReturnDate(14); #></p>
</html>
是否可以在 t4 模板中创建 methods/functions 以 return 大量文本,例如html tables/rows 要在 t4 模板中使用?
我知道我可以添加 'simple' 方法来计算和 return 'simple' 值,例如
<#+
public string GetReturnDate(string days)
{
var d = Convert.ToDouble(days);
var returnDate = DateTime.Now.AddDays(d).ToString("ddd dd-MMM-yy");
return returnDate.ToUpper();
}
#>
上述方法会return一个字符串格式的日期。
但是,在我的 t4 模板示例中,我想创建一个 method/function 到 return 多行 html 代码,以便我可以在多个地方重用它:
<# foreach (TransactionItem t in transaction) { #>
<div>
<p><#= t.Item #></p>
<p><#= t.Price #></p>
</div>
<# } #>
我认为最简单的方法是为您的模板创建一个支持 DLL。在单元测试中测试所需的功能,然后以与此类似的方式引用您的支持 DLL...
<#@ assembly name="$(SolutionDir)[Project Name]\bin\Debug\[Project Name].dll" #>
在此示例中,[项目名称] 是您的支持项目的名称。引用后,在您的模板中实例化它,如下所示...
var supportProj = new [Project Name]();
然后像使用其他任何东西一样使用它 class。
此方法抽象了支持 DLL 中的复杂逻辑,使模板更易于理解。然后,支持 DLL 可以在其中包含一个方法,returns 您需要的项目。
我有一个大型 t4 文本模板要生成 html。
t4 模板:
<#@ template language="C#" debug="true" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.Globalization" #>
<#@ parameter type="Transaction" name="transaction" #>
<#@ parameter type="System.Collections.Generic.Dictionary<string,string>" name="resources" #>
<html>
<p>test paragraph1 </p>
<# foreach (TransactionItem t in transaction) { #>
<p><#= t.Item #> <#= t.Price #></p>
<# } #>
<p>test paragraph2 </p>
<p>test paragraph3</p>
<p>
<#= this.GetClearanceReturnDate(14); #></p>
</html>
是否可以在 t4 模板中创建 methods/functions 以 return 大量文本,例如html tables/rows 要在 t4 模板中使用?
我知道我可以添加 'simple' 方法来计算和 return 'simple' 值,例如
<#+
public string GetReturnDate(string days)
{
var d = Convert.ToDouble(days);
var returnDate = DateTime.Now.AddDays(d).ToString("ddd dd-MMM-yy");
return returnDate.ToUpper();
}
#>
上述方法会return一个字符串格式的日期。
但是,在我的 t4 模板示例中,我想创建一个 method/function 到 return 多行 html 代码,以便我可以在多个地方重用它:
<# foreach (TransactionItem t in transaction) { #>
<div>
<p><#= t.Item #></p>
<p><#= t.Price #></p>
</div>
<# } #>
我认为最简单的方法是为您的模板创建一个支持 DLL。在单元测试中测试所需的功能,然后以与此类似的方式引用您的支持 DLL...
<#@ assembly name="$(SolutionDir)[Project Name]\bin\Debug\[Project Name].dll" #>
在此示例中,[项目名称] 是您的支持项目的名称。引用后,在您的模板中实例化它,如下所示...
var supportProj = new [Project Name]();
然后像使用其他任何东西一样使用它 class。 此方法抽象了支持 DLL 中的复杂逻辑,使模板更易于理解。然后,支持 DLL 可以在其中包含一个方法,returns 您需要的项目。