其实这个标题命名的有点大,但是主题明确:就是使用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:
string str = "this is first page! ";
Response.Write(str + "started...");
Server.Execute("SecondPage.aspx");
Response.Write(str + "End...");
页面SecondPage.aspx:
string str = "this is the second page! "
Response.Write(str);
执行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
目前来说MiniWord功能还比较少,达不到商用的程度,但是我相信 在不久的将来,MiniWord会越来越好!如果对MiniWord感兴趣的可以去Gitee或者Github点个
St
ar。
1、VTemplate
模板引擎
的简介
VTemplate
模板引擎
也简称为VT,是基于
.NET
的
模板引擎
,它允许任何人使用简单的类似
HTML
语法的
模板
语言来引用
.NET
里定义的对象。当VTemplate应用于web开发时,界面设计人员可以和程序开发人员同步开发一个遵循MVC架构的web站点,也就是说,
页面
设计人员可以只关注
页面
的显示效果,而由程序开发人员关注业务逻辑编码。VTemplate将....
你有没有这样的感觉,开启一个新项目时,总是做一堆体力活——项目的结构层次,常用日志库,OpenAPI库,ORM库,的引入,权限认证方式选择添加,配置文件重新归置存放等等。公共框架的部分总是...
在
.NET
中
经常需要进行一些内容的格式转换比如从字符串转数字等操作,平常性的操作使用Convert方法没什么问题。
经常性的,我会在转换失败的时候需要一个默认值。比如:时间这个值,我获取用户的输入值,如果没有输入则获取当前的时间值,一般情况下如下:
public
st
atic DateTime CDateTime(object root, DateTime defaultV...
每个人都有自己习惯的项目结构,有人的喜欢在项目里面建解决方案文件夹;有的人喜欢传统的三层命名;有的人喜欢单一,简单的项目一个csproj就搞定。。
反正就是萝卜青菜,各有所爱。
可能不同的公司对这些会有特定的要求,也可能会随开发自己的想法去实践。
那么,问题就来了。如果有一个新项目,你会怎么去创建?
可能比较多的方式会是下面三种:
简单粗暴型,打开VS就是右键添加,然后引入一堆包,每个项目...
场景:日常工作
中
,你可能会碰到需要新建一个全新的解决方案的情况(如公司新起了一个新项目,需要有全新配套的后台程序),如果公司内部基础框架较多、解决方案需要DDD模式等,那么从新起项目到各种依赖引用到能实际可用,一大堆的配置都需要重新设定、测试,耗时耗力,根据项目的大小,往往可能需要 1-2 小时甚至更久。
在
.net
core 之前,虽然有相关的解决方法可以实现“项目
模板
”这个需求,...
可以看到咖啡和茶的制作工序是差不多的, 都是有4步, 其
中
有两步它们两个是一样的, 另外两步虽然具体内容不一样, 但是都做做的同一类工作.
现在问题也有了, 当前的设计两个类里面有很多重复的代码, 那么应该怎样设计以减少冗余呢?
把共有的方法...