做web开发也有几年了。自己在不同的公司有不同的认识。最近做blog项目。认识到了模板类在web开发中的作用。晚上在家。总想可以做一个专门的为asp.ne开发而设计的模板类。于是就写了这个模板类。
下面是里面的一个说明文件
//---------------------------------------------------------------------------------------------------------------------------//
介绍:
此模板类是为三层架构web站点开发而编写的。StringTempletReplet.dll组件
内包含模板类。StringTempletReplet命名空间内的模板类可以使用在UI层,也可
以使用在逻辑层。
*****************************************************************************
运行方法:
建立一个名叫 Templet 的虚拟目录指象解压后的 Templet 文件夹
运行内部的 RetuenString.aspx,ReturnText.aspx,WriteArticon.aspx,
LongLoop.aspx 页面。在页面对应的cs文件上有相应说明。
第一次打开页面应为要保留委托对象和模板文件到缓存中,所以真正的速度要看第
一次以后的。
*****************************************************************************
原理介绍:
一种标签替换的模板。使用了c#中的指针运算查找标签位置。
用委托对象指象标签对应的解析函数,并用静态对象缓存全部委托对象。
在不改变模板正文的情况下,缓存全部模板内容。可以动态更换模板。
****************************************************************************
标签介绍:
在成对特殊符号{$ 和 $} 之间的内容为标签
如
{$标签名:参数1:参数2:参数3::字符10$}
{$标签名:参数1:参数2::字节10$}
{$dt[5][name]$}
在标签内部通过 :: 符号把标签分为 (标签参数部分) 和 (命令控制部分) 两快
{$标签名:参数1:参数2:参数3::字节10$}
(标签参数部分) :: (命令控制部分)
在这两部分内以:号分割标签参数部分和命令控制部分
标签参数部分 ---第一个为标签名,就是标签解析函数的对应名称,以后的为函数的参数,
标签解析函数接受全部参数类型为string类型的,参数个数为0--20个的
函数,返回类型为string类型。参数可在标签上写死,也可以动态写入。
命令控制部分 ---现在只有两个命令符号 字符 和 字节 ,后带一个数字参数,表示截取标
签解析结果的长度, 如 字符10 字节10 。
我以后会在扩展其他的命令控制符号。
标签和函数对应请看Business.cs 文件内说明
标签具体使用规则请看Templet/templet/aa1.htm 模板内说明
具体调用规则请看项目中的这三个aspx页面
WriteArticon.aspx -- 读模板 解析 写入文件 用于产生静态页面的新闻系统
ReturnText.aspx -- 读模板 解析 返回字符串 用与写经常要改变外观的页面,
换皮肤的页面。可动态更换模板 。
******************************************************************************
标签动态取值:
标签解析函数除可以接受标签内传来的固定参数外。可以有三种方式接受动态参数
象模板类传递 Datatable 和 Hashtable 对象以后
(Datatable 从数据层获取 ,Hashtable 一般是页面变量 和其他变量)
1。 dt[5][name] ---- 表示取Datatable内5行name列上的数值,第一个为数字,
第二个是列名
2。 dt[name] ---- 在loop循环外表示取Datatable内0行name列上的数值,
一个参数表示列名
---- 在loop循环内表示取Datatable内name列上的数值,取那
些行通过loop标签的参数决定
3。 page[PageId] ----- 表示取Hashtable对象内PageId键上的数值,返回string类型
如 {$二个参数书签:dt[3][word]:page[UserId]::字符10$}
{$dt[5][name]$} {$dt[name]$} {$page[PageId]$}
或
{$dt[5][name]::字符10$} {$dt[name]::字符10$} {$page[PageId]::字符10$}
这样的标签表示直接在页面上显示对象内的数值
****************************************************************************
页面或类内调用模板类方法:
ReturnText.aspx -- 读模板 解析 返回字符串 用与写经常要改变外观的页面
换皮肤的页面
****************************************************************************
标签函数关联:
*****************************************************************************
标签内loop循环介绍:
标签内通过一些特殊符号,可以实现非嵌套loop循环
//------------------------------------------------------------------------
{$loop(3,0,alter)$} //显示三行,从0行开始,如果有交替列,运行交替列
{$BlockItem$} //默认的循环行,
<td bgcolor="#33ccff">标题:{$dt[5][name]$} , 作者:{$一个参数:dt[dddf]$}</td>
{$/BlockItem$}
{$BlockAlterItem$} // 交替循环行 当没有默认行标签对,有交替循标签对。就把交替循标签对当默认行标签对
<td bgcolor="#ff6699">标题:{$dt[5][name]$} , 作者:{$一个参数:dt[dddf]$}</td>
{$/BlockAlterItem$}
{$BlockPatch$} //当要循环的行数大于Datatable内的行数时,用这里的内容补充显示 。 如果没有 “补充” 标签对。那么当显示行数大于Datatable中的行数时,将只显示Datatable中的行数
<td bgcolor="#33ccff">补充(里面也可以使用标签)</td>
{$/BlockPatch$}
{$BlockAlterPatch$} //没有补充标签对,有交替补充标签对。就把交替补充标签对当补充标签对
<td bgcolor="#ff6699">交替补充(里面也可以使用标签)</td>
{$/BlockAlterPatch$}
{$/loop$} //循环结束
//--------------------------------------------------------------
{$BlockItem$} {$/BlockItem$} :默认的循环行标签对
{$BlockAlterItem$} {$/BlockAlterItem$} :交替循环行标签对
{$BlockPatch$} {$/BlockPatch$} :默认补充行标签对
{$BlockAlterPatch$} {$/BlockAlterPatch$} :交替补充行标签对
//------------------------------------------------------
如果只有默认的循环行可以不加{$BlockItem$}标签对
如
{$loop(3,0,alter)$}
<tr><td>{$函数标签$}</td></tr>
{$/loop$}
和
{$loop(3,0,alter)$}
{$BlockItem$}<tr><td>{$函数标签$}</td></tr>{$/BlockItem$}
{$/loop$}
是表示一样的效果
//-------------------------------------------------------------
{$loop(3,0,alter)$}
{$BlockAlterPatch$}
<tr><td>{$函数标签$}</td></tr>
{$/BlockAlterPatch$}
{$/loop$}
如果只有交替循环行标签对没有默认的循环行标签对那么交替循环行标签对将自动转换为
默认循环行标签对
//--------------------------------------------------------------
{$loop(3,0,alter)$}
{$BlockAlterPatch$}
<tr><td>{$函数标签$}</td></tr>
{$/BlockAlterPatch$}
{$/loop$}
如果只有交替补充行标签对没有默认补充行标签对那么交替补充行标签对将自动转换为
默认循环行标签对
**************************************************************************
loop参数说明:
{$loop(3,0,alter)$}
loop上一共有三个参数,可适当减少
第一个参数:
3:循环3次 ,没有表示循环全部
第二个参数:
2:从2开始,没有表示从0开始
第三个参数:
alter:交替
noalter:不交替 ,没有表示默认为交替,所以alter加不加是一样的
如果三个参数全不写,至少要保留一对空括号 {$loop()$}
表示循环Datatable内的行数
从0行开始,有补充就显示补充。
*************************************************************************
有更新了一下。主要是优化循环。
现在循环5万行的表格要 300-400 毫秒。
***************************************************************************
建议模板不要大于85k,小心成为大尺寸对象。那可是二代对象
建议页面模板小于等于919个,对应函数标签建议不超过1597个。
很高兴看见模板类和我自己的认识一起成长。
*****************************************************************************