小鬼之家
流浪,游走于文明与原始之间. 关注底层技术,实现美好生活。QQ: 886988
博客园
::
首页
::
联系
::
订阅
::
管理
56 Posts :: 0 Stories :: 61 Comments :: 1 Trackbacks
公告
希望我的文章对您有用,走过路过,请留下只言片语,广告灌水就免了吧。
与我联系
发短消息
搜索
常用链接
我的随笔
我的空间
我的短信
我的评论
更多链接
我的参与
我的新闻
最新评论
我的标签
留言簿
(1)
给我留言
查看留言
随笔分类
C#(19)
C/C++(3)
English
javascript(9)
tec(1)
WEB(3)
编译原理(1)
好东东(2)
另类开发(3)
设计思想(4)
算法(2)
杂事(13)
随笔档案
2008年9月 (1)
2008年8月 (2)
2008年7月 (5)
2008年6月 (4)
2008年5月 (3)
2008年4月 (4)
2008年3月 (4)
2008年1月 (1)
2007年12月 (1)
2007年10月 (1)
2007年9月 (9)
2007年8月 (4)
2007年7月 (1)
2007年6月 (1)
2007年5月 (8)
2007年4月 (7)
相册
朋友
最新评论
1. re: Cvv.WebUtility 我的MVC框架介绍
发出来看看
--我主岑发
2. re: Cvv.WebUtility 我的MVC框架介绍
有什么特别的,发出来看看!
--未注册用户
3. re: Cvv.WebUtility 我的MVC框架介绍
你这个框架开源吗?看起来我们这些菜鸟要学习一段时间了!
--你这个开源学习吗?
4. re: Cvv.WebUtility 我的MVC框架介绍
学习
--烟仔
5. re: Cvv.WebUtility 我的MVC框架介绍
@阿布
现在promesh.net支持自定义视图引擎语法了. 只是个表现形式.与$[Var] 也没啥区别吧
--Phantaci.com
阅读排行榜
1. 我的模板分析引擎类PHP的.net开发方法--功能介绍篇(2557)
2. 我的模板分析引擎类PHP的.net开发方法--功能实现篇(2353)
3. 我的模板分析引擎类PHP的.net开发方法--标签设计篇(1841)
4. Cvv.WebUtility 我的MVC框架介绍(1440)
5. StringHelper类的代码也写得不错,值得好好学习学习(406)
评论排行榜
1. 我的模板分析引擎类PHP的.net开发方法--功能介绍篇(25)
2. Cvv.WebUtility 我的MVC框架介绍(12)
3. 我的模板分析引擎类PHP的.net开发方法--功能实现篇(8)
4. StringHelper类的代码也写得不错,值得好好学习学习(3)
5. JSONSerializer把类转换成JSON字符串(3)
60天内阅读排行
1. Cvv.WebUtility 我的MVC框架介绍(1440)
2. table filter(23)
3. 使用纯C语言开始win32 sdk编程(16)
4. 发现了个不错的图片网站(15)
5. 最简单的win32程序(c语言实现)(13)
我的模板分析引擎类PHP的.net开发方法--功能介绍篇
从一开始接触asp.net我就不领微软的情,对其提供和包装的各大控件给人们带来的方便性视而不见,一直想实现自己的模板分析方案,但工作中一直是别人安排我做什么我就得做什么,根本没时间做自己想做的事情,所以自己的模板方案迟迟未能实现。不过最近因为项目的需要,我终于有机会实现它了。
以下是我实现的模板文件Skin-test.html
{repeater rptTables}
{headerTemplate}
<
div
id
="miniBox"
>
<
div
class
="hd"
>
<
div
class
="l"
>
1
</
div
>
<
div
class
="title"
>
{repeater rptTables2}{headerTemplate}55555{/headerTemplate}{/repeater}
</
div
>
<
div
class
="r"
>
3
</
div
>
</
div
>
{/headerTemplate}
{itemTemplate}
<
div
class
="it1"
>
<
div
class
="l"
>
<
input
id
="{eval TableId}"
type
="checkbox"
/>
<
a
href
="EditTable.aspx?tableid={eval TableId}"
>
{eval TableName}
</
a
>
</
div
>
<
div
class
="r"
>
<
a
href
="EditTable.aspx?tableid={eval TableId}"
>
{lang Edit}
</
a
>
<
a
href
="EditTable.aspx?tableid={eval TableId}"
>
{lang Delete}
</
a
>
</
div
>
</
div
>
{/itemTemplate}
{alternatingItemTemplate}
<
div
class
="it2"
>
<
div
class
="l"
>
<
input
id
="{eval TableId}"
type
="checkbox"
/>
<
a
href
="EditTable.aspx?tableid={eval TableId}"
>
{eval TableName}
</
a
>
</
div
>
<
div
class
="r"
>
<
a
href
="EditTable.aspx?tableid={eval TableId}"
>
{lang Edit}
</
a
>
<
a
href
="EditTable.aspx?tableid={eval TableId}"
>
{lang Delete}
</
a
>
</
div
>
</
div
>
{/alternatingItemTemplate}
{footerTemplate}
<
div
class
="ft"
>
<
select
id
="Select1"
>
<
option
value
=""
>
{lang Action}
</
option
>
<
option
value
=""
>
{lang Delete}
</
option
>
<
option
value
=""
>
{lang Build}
</
option
>
</
select
>
</
div
>
{repeater rptTables3}{headerTemplate}55555{/headerTemplate}{itemTemplate}{eval TableId}{/itemTemplate}{/repeater}
</
div
>
{/footerTemplate}
{/repeater}
以下是分析这个模板的代码:
PageSetting p
=
ResourceManager.GetPageSetting(context.Request.CurrentExecutionFilePath);
string
txt
=
Skins.GetSkin(p.SkinFile);
IUI.ITemplate tmp
=
UIFactory.DataAccess.CreateTemplate();
tmp.InstantiateIn(
ref
txt);
if
(tmp.ContainsKey(
"
rptTables
"
))
{
Repeater rpt
=
(Repeater)tmp.FindControl(
"
rptTables
"
);
Repeater rpt2
=
(Repeater)tmp.FindControl(
"
rptTables2
"
);
Repeater rpt3
=
(Repeater)tmp.FindControl(
"
rptTables3
"
);
List
<
TableInfo
>
ls
=
new
List
<
TableInfo
>
();
for
(
int
i
=
0
; i
<
10
; i
++
)
{
TableInfo _tblInfo
=
new
TableInfo();
_tblInfo.TableId
=
Guid.NewGuid();
_tblInfo.TableName
=
string
.Format(
"
table {0}
"
, i);
ls.Add(_tblInfo);
}
rpt.DataSource
=
ls;
rpt.DataBind();
rpt2.DataSource
=
ls;
rpt2.DataBind();
rpt3.DataSource
=
ls;
rpt3.DataBind();
}
context.Response.Write(tmp.Render());
以下是执行的结果:
<
div
id
="miniBox"
>
<
div
class
="hd"
>
<
div
class
="l"
>
1
</
div
>
<
div
class
="title"
>
55555
</
div
>
<
div
class
="r"
>
3
</
div
>
</
div
>
<
div
class
="it1"
>
<
div
class
="l"
>
<
input
id
="8f035f73-a025-4aaa-a9ab-9f6d475ee762"
type
="checkbox"
/>
<
a
href
="EditTable.aspx?tableid=8f035f73-a025-4aaa-a9ab-9f6d475ee762"
>
table 0
</
a
>
</
div
>
<
div
class
="r"
>
<
a
href
="EditTable.aspx?tableid=8f035f73-a025-4aaa-a9ab-9f6d475ee762"
>
edit
</
a
>
<
a
href
="EditTable.aspx?tableid=8f035f73-a025-4aaa-a9ab-9f6d475ee762"
>
delete
</
a
>
</
div
>
</
div
>
<
div
class
="it1"
>
<
div
class
="l"
>
<
input
id
="6571e446-7c50-48a7-8195-167cddab6966"
type
="checkbox"
/>
<
a
href
="EditTable.aspx?tableid=6571e446-7c50-48a7-8195-167cddab6966"
>
table 1
</
a
>
</
div
>
<
div
class
="r"
>
<
a
href
="EditTable.aspx?tableid=6571e446-7c50-48a7-8195-167cddab6966"
>
edit
</
a
>
<
a
href
="EditTable.aspx?tableid=6571e446-7c50-48a7-8195-167cddab6966"
>
delete
</
a
>
</
div
>
</
div
>
<
div
class
="it1"
>
<
div
class
="l"
>
<
input
id
="944a4cbc-3442-4d12-9c84-95f31d463e32"
type
="checkbox"
/>
<
a
href
="EditTable.aspx?tableid=944a4cbc-3442-4d12-9c84-95f31d463e32"
>
table 2
</
a
>
</
div
>
<
div
class
="r"
>
<
a
href
="EditTable.aspx?tableid=944a4cbc-3442-4d12-9c84-95f31d463e32"
>
edit
</
a
>
<
a
href
="EditTable.aspx?tableid=944a4cbc-3442-4d12-9c84-95f31d463e32"
>
delete
</
a
>
</
div
>
</
div
>
<
div
class
="it1"
>
<
div
class
="l"
>
<
input
id
="879b8f82-0d97-4c44-8996-9eb3ab676481"
type
="checkbox"
/>
<
a
href
="EditTable.aspx?tableid=879b8f82-0d97-4c44-8996-9eb3ab676481"
>
table 3
</
a
>
</
div
>
<
div
class
="r"
>
<
a
href
="EditTable.aspx?tableid=879b8f82-0d97-4c44-8996-9eb3ab676481"
>
edit
</
a
>
<
a
href
="EditTable.aspx?tableid=879b8f82-0d97-4c44-8996-9eb3ab676481"
>
delete
</
a
>
</
div
>
</
div
>
<
div
class
="it1"
>
<
div
class
="l"
>
<
input
id
="03452077-97b0-4236-b316-4856e3afde71"
type
="checkbox"
/>
<
a
href
="EditTable.aspx?tableid=03452077-97b0-4236-b316-4856e3afde71"
>
table 4
</
a
>
</
div
>
<
div
class
="r"
>
<
a
href
="EditTable.aspx?tableid=03452077-97b0-4236-b316-4856e3afde71"
>
edit
</
a
>
<
a
href
="EditTable.aspx?tableid=03452077-97b0-4236-b316-4856e3afde71"
>
delete
</
a
>
</
div
>
</
div
>
<
div
class
="it1"
>
<
div
class
="l"
>
<
input
id
="277c9626-1667-4f94-8e9a-b4f94d7e4843"
type
="checkbox"
/>
<
a
href
="EditTable.aspx?tableid=277c9626-1667-4f94-8e9a-b4f94d7e4843"
>
table 5
</
a
>
</
div
>
<
div
class
="r"
>
<
a
href
="EditTable.aspx?tableid=277c9626-1667-4f94-8e9a-b4f94d7e4843"
>
edit
</
a
>
<
a
href
="EditTable.aspx?tableid=277c9626-1667-4f94-8e9a-b4f94d7e4843"
>
delete
</
a
>
</
div
>
</
div
>
<
div
class
="it1"
>
<
div
class
="l"
>
<
input
id
="afe35db0-d07a-44fe-88be-db5ded717916"
type
="checkbox"
/>
<
a
href
="EditTable.aspx?tableid=afe35db0-d07a-44fe-88be-db5ded717916"
>
table 6
</
a
>
</
div
>
<
div
class
="r"
>
<
a
href
="EditTable.aspx?tableid=afe35db0-d07a-44fe-88be-db5ded717916"
>
edit
</
a
>
<
a
href
="EditTable.aspx?tableid=afe35db0-d07a-44fe-88be-db5ded717916"
>
delete
</
a
>
</
div
>
</
div
>
<
div
class
="it1"
>
<
div
class
="l"
>
<
input
id
="3a2f445e-44c4-4144-84da-b08e2fb90d3b"
type
="checkbox"
/>
<
a
href
="EditTable.aspx?tableid=3a2f445e-44c4-4144-84da-b08e2fb90d3b"
>
table 7
</
a
>
</
div
>
<
div
class
="r"
>
<
a
href
="EditTable.aspx?tableid=3a2f445e-44c4-4144-84da-b08e2fb90d3b"
>
edit
</
a
>
<
a
href
="EditTable.aspx?tableid=3a2f445e-44c4-4144-84da-b08e2fb90d3b"
>
delete
</
a
>
</
div
>
</
div
>
<
div
class
="it1"
>
<
div
class
="l"
>
<
input
id
="8d555e36-c4c7-4219-8f67-8305db9ae8d2"
type
="checkbox"
/>
<
a
href
="EditTable.aspx?tableid=8d555e36-c4c7-4219-8f67-8305db9ae8d2"
>
table 8
</
a
>
</
div
>
<
div
class
="r"
>
<
a
href
="EditTable.aspx?tableid=8d555e36-c4c7-4219-8f67-8305db9ae8d2"
>
edit
</
a
>
<
a
href
="EditTable.aspx?tableid=8d555e36-c4c7-4219-8f67-8305db9ae8d2"
>
delete
</
a
>
</
div
>
</
div
>
<
div
class
="it1"
>
<
div
class
="l"
>
<
input
id
="0edd6e3e-d1fc-4842-9832-d2e037f770ea"
type
="checkbox"
/>
<
a
href
="EditTable.aspx?tableid=0edd6e3e-d1fc-4842-9832-d2e037f770ea"
>
table 9
</
a
>
</
div
>
<
div
class
="r"
>
<
a
href
="EditTable.aspx?tableid=0edd6e3e-d1fc-4842-9832-d2e037f770ea"
>
edit
</
a
>
<
a
href
="EditTable.aspx?tableid=0edd6e3e-d1fc-4842-9832-d2e037f770ea"
>
delete
</
a
>
</
div
>
</
div
>
<
div
class
="ft"
>
<
select
id
="Select1"
>
<
option
value
=""
>
action
</
option
>
<
option
value
=""
>
delete
</
option
>
<
option
value
=""
>
Build
</
option
>
</
select
>
</
div
>
555558f035f73-a025-4aaa-a9ab-9f6d475ee7626571e446-7c50-48a7-8195-167cddab6966944a4cbc-3442-4d12-9c84-95f31d463e32879b8f82-0d97-4c44-8996-9eb3ab67648103452077-97b0-4236-b316-4856e3afde71277c9626-1667-4f94-8e9a-b4f94d7e4843afe35db0-d07a-44fe-88be-db5ded7179163a2f445e-44c4-4144-84da-b08e2fb90d3b8d555e36-c4c7-4219-8f67-8305db9ae8d20edd6e3e-d1fc-4842-9832-d2e037f770ea
</
div
>
posted on 2007-08-23 22:16
黄志强
阅读(2557)
评论(25)
编辑
收藏
所属分类:
另类开发
Feedback
#1楼
2007-08-23 23:31
麦舒
嗯,不错,不过要想成为一个成熟的模版解释器,不是件易事。
回复
引用
查看
#2楼
[
楼主
]
2007-08-23 23:35
黄志强
@麦舒
我会根据项目的需要和实际开发过程的感悟不断地完善它的.
回复
引用
查看
#3楼
2007-08-24 00:12
kisskiki [未注册用户]
如果模版文件能动态生成就好了
回复
引用
#4楼
2007-08-24 01:04
deerchao
What a great idea to replace <asp:Repeater id="rptTables" > with {repeater rptTables}!
回复
引用
查看
#5楼
2007-08-24 01:14
kwklover
感觉不到有什么好处哦
UI和程序逻辑还是关联在一块,把<asp:Repeater id="rptTables" >替换成{repeater rptTables}有什么好处呢?或者解决了什么问题呢?看不明白。
回复
引用
查看
#6楼
2007-08-24 01:30
S.Sams
好像跟 Repeater 没什么分别!
回复
引用
查看
#7楼
2007-08-24 01:48
sseo [未注册用户]
名茶
回复
引用
#8楼
2007-08-24 02:28
Moder [未注册用户]
不如discuz!nt的那种方式直接吧?
回复
引用
#9楼
2007-08-24 06:51
金色海洋(jyk)
好玩?不好玩?
回复
引用
查看
#10楼
2007-08-24 07:47
补丁
相比asp.net的控件和xslt,想不出哪里好呢?
回复
引用
查看
#11楼
2007-08-24 08:01
Share赖
我参照PHP的smarty思想,做了一个相关的。
以下是显示模版,SQL语句写在XML中,用类方法读取这个SQL,得到DataTable,然后再传到替换方法中,主要用正则把<!!xxx!!>替换成DataTable中的DataRow值,再组成string值返回客户端。主要用好处就是随时更改模版页和SQL都不用重新编译,在显示数据上很灵活。
模版页:
<table>
<!for-tr-begin!>
<tr>
<!for-td-begin!>
<td>
<img src="Images/Mimages/listdot.gif" /> <a href="ProductDetail.aspx?ID=<!!ProductID!!>"><!!ProductName!!></a></td>
<!for-td-end!>
</tr>
<!for-tr-end!>
</table>
回复
引用
查看
#12楼
2007-08-24 08:28
henry
NVelocity在MonoRail上应用已经很成功了,楼主为何不试一下.
回复
引用
查看
#13楼
2007-08-24 08:30
BoyLee
discuz!nt的不错.也可以考虑下开源的老外写的
回复
引用
查看
#14楼
2007-08-24 08:45
bluebirdzx [未注册用户]
感觉楼主的思路还不是很清晰,没有通用性而且感觉就是为自己的项目用的
回复
引用
#15楼
[
楼主
]
2007-08-24 08:47