大学IT网 - 最懂大学生的IT学习网站! QQ资料交流群:367606806
当前位置:大学IT网 > ASP.NET技巧 > CodeSmith 使用教程(8): CodeTemplate对象

CodeSmith 使用教程(8): CodeTemplate对象(2)

关键词:CodeSmith使用教程  阅读(1136) 赞(12)

[摘要]本文主要介绍CodeSmith 使用教程(8): CodeTemplate对象,希望对你解决相关问题提供帮助。

重载ParseDefaultValue 方法
在定义属性的缺省值时,有时有些属性的缺省值可能无法从String转换,此时可以通过重载ParseDefaultValue 方法,这个方法会被CodeSmith引擎中处理每个属性时调用,如果你重载了这个方法,可以按照你自己的逻辑来处理属性的缺省值。

重载Render 方法
CodeTemplate的Render方法是CodeSmith引擎生成最终输出时调用的,可以通过重载这个方法来修改输出的内容或是把输出写到多个文件中。
比如下面代码除了生成缺省的输出外,还把输出写到另外两个文件中:

<%@ CodeTemplate Language="C#" TargetLanguage="Text"
   Description="AddTextWriter Demonstration." %>
<%@ Import Namespace="System.IO" %>
//This template demonstrates using the AddTextWriter method
//to output the template results to multiple locations concurrently.
<script runat="template">
public override void Render(TextWriter writer)
    {
        StreamWriter fileWriter1 = new StreamWriter(@"test1.txt", true);
        this.Response.AddTextWriter(fileWriter1);

        StreamWriter fileWriter2 = new StreamWriter(@"test2.txt", true);
        this.Response.AddTextWriter(fileWriter2);

        base.Render(writer);

        fileWriter1.Close();
        fileWriter2.Close();
    }
</script>

注意调用基类的base.Render,否则你就不会输出到缺省的文件。本例下载

模板事件

CodeTemplate类定义了下面几个事件,你可以中这些事件发生时添加自动的事件处理.

 OnInit 事件帮助中代码模板创建时

OnPreRender 事件发生在准备写输出文件前

 OnPostRender 事件发生在准备写输出文件后

 OnPropertyChanged 事件发生在属性值发生变化时.

使用Response对象

和Asp.Net的Page对象一样,可以通过CodeTemplate的Response属性直接在输出流中写入内容。比如

<%@ CodeTemplate Language="C#" TargetLanguage="Text"
Description="This template demonstrates writing directly to the Response property" %>
<% RenderDirect(); %>
<script runat="template">
public void RenderDirect()
{
Response.WriteLine("Written directly to the Response property.");
Response.WriteLine("Hello " + System.Environment.UserName + "!");
}
</script>


相关评论