.NET中的模板引擎技术——StringTemplate(st(or HTML)模板+ASP.NET页面作为模板)

 其实这个标题命名的有点大,但是主题明确:就是使用StringTemplate模板引擎,采用HTML页面和ASP.NET页面(可以使用ASP.NET控件)作为模板,实现*****(这个实现什么就不用说了吧,这里省略200字。)

 

 

1. 模板技术的原理:

 

就是能够自动替换占位符的替换引擎。原理上也就是两个步骤,找到—>替换。但是替换不是简单的替换,包括:

 

简单变量替换();
复杂变量替换();
对象变量替换();
键值类型替换();
自定义集合替换();
同时显示多个变量();
模板调用();
给调用模板传参数();
值模板();
简单循环();
交差循环显示();
通过模板交差循环();
条件判断();
从文件中创建模板();

 

StringTemplate基本上就是按照这种模式来设计的。

 

 

2. 技术实现

 

2.1 首先是在HTML模板文件中:

 

姓名:$User.Name$ 年龄:$User.Value$

 

在对应的cs代码页面中:

 

 

 

2.2 与ASP.NET页面比较

 

aspx页面:

 

 <asp:Label id="Name" runat="Server" /><asp:Label id="Mail" runat="Server" />


aspx.cs文件:

 

 

 

在StringTemplate中,我们知道StringTemplate可以完成很多工作,实际的功能已经很强大了,包括比如条件判断、循环遍历...我们只需要在后端代码页面进行数据填充就可以了,但是对于复杂的业务逻辑呢?比如可以判断,可以循环,可以分支,可以使用现成的控件,对于复杂的功能,我们是不是很期望能够使用到ASP.NET本身自带的强大的控件呢?ok,恭喜你,你的想法将会得到实现!!哈哈!~

 

 

在开始之前,我们介绍一下使用ASP.NET模板与StringTemplate方法的对比:

 

                           aspx模板         StringTemplate
asp.net控件           支持                     不支持
复杂显示逻辑           支持                     支持(未经测试所有可能性)
编辑器支持              支持                     不支持
编译检测                 支持                     不支持

 

 

OMG!!用ASP.NET作为模板的话功能真是好强大啊!!但是。。。。关键的问题是。。怎么利用aspx的页面作为模板来被调用呢??

 

其实解决的方法很简单,只需要Server.Execute()就可以将执行的aspx页面运行的结果以一个TextWriter返回。

 

Server 是 ASP 中的一个内置对象,它有一个方法为 Execute,用法是:

 

Server.Execute(path)


微软认为它的闪光点是:可以将复杂的页面划分为多个模块,然后用 Server.Execute 将这些模块集中在一个页面显示。

 

例子:

 

页面First.aspx:

 

 

页面SecondPage.aspx:

 

 

执行First.aspx:显示的结果为:

 

this is first page! starting...this is the second page! this is the first page! End...

 

看了这个结果是不是已经恍然大悟了??呵呵呵。。。

但是。。。别高兴得太早了。。。因为我们在st或者html的模板页面中,是要进行页面布局的,如果处理不好的话就会影响到页面的布局和样式,因为Server.Execute是无返回值的呀!!那怎么处理这个问题呢?oh!~~

 

其实解决办法很简单。。如下:

 

 

是简单吧?呵呵呵~

 

如果想利用用户控件完成的话也是可以的哟,具体方法请参考这里:

 

Render User Control as String Template :

http://aspadvice.com/blogs/ssmith/archive/2007/10/19/Render-User-Control-as-String-Template.aspx

 

 

另外,在Server.Execute中,调用和被调用的文件之间共享的内容有:

> Application 变量
> Session 变量
> Server 变量和属性
> Request 集合和属性,包括 Form、QueryString 数据。
> Response 集合和属性,被调用的文件可以更改 HTTP 头信息。但是同样要求还没有用 Response.Flush 向客户端发送有信息。
> Server.Execute 也可以形成递归,但递归达到一定的次数后不会像 Server.Transfer 一样自动终止,而是报错并终止。

 

ok,这里只讲了关键点的原理和实现,实际上基础的东西都没介绍,我想那些基础的东西对于大家来说早就精通了。。。

本文中引用了不少作者的成果,在这里也感谢他们的共享和付出,谢谢!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文参考网址:

http://blog.csdn.net/ming_chang/archive/2009/06/01/4234426.aspx

http://aspadvice.com/blogs/ssmith/archive/2007/10/19/Render-User-Control-as-String-Template.aspx

http://www.cftea.com/c/2006/09/KMA6IL9SD8Y9P6GZ.asp

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
网鸟Asp.Net模板引擎是基于C#语言开发的应用于Asp.Net平台的代码分析工具。它可以将指定语法结构的代码模板转换为运行时代码文档以提高您的开发效率,同时也能够强制分离您的代码业务逻辑和用户界面,实现分层开发。 网鸟Asp.Net模板引擎目前是针对网站应用的,所以默认生成的是.aspx运行时文档。为了增强组件的可扩展性和满足用户处理代码的常规需求,我们在组件内部提供了一系列的接口、委托、事件等,您可以通过这些接口、委托和事件来增强网鸟Asp.Net模板引擎的功能。 概览: •项目名称:网鸟Asp.Net模板引擎 •运行环境:.Net 4 •当前版本:Version 4.2 •主要作者:老陈 •版权所有:网鸟老兵团 •技术支持:网鸟IT技术论坛 功能: •支持SSI机制 •内置SDE(动态页面与静态页面自动均衡)机制 •内置多语言引擎 •支持js/css代码合并及存储路径自定义 •支持if、for、foreach、switch、while等几乎所有的流程控制语句 •独立的XHTML解析器,可以用来做点儿别的事情 •支持生成运行耗时统计代码 •支持自定义运行时后期处理 •支持自定义应用程序信息 •支持命名空间的导入,自定排除重复并排序 •支持自定义页面基类 •…… 网鸟QQ群: 刺客巅峰(47700865):欢迎各种IT淫才加入讨论! NoSQL(23152359):仅欢迎搞NoSQL的各路神仙!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值