添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
爱听歌的茶叶  ·  c - What do the ...·  1 年前    · 
深沉的小熊猫  ·  Configuring SNMP for ...·  1 年前    · 

其实这个标题命名的有点大,但是主题明确:就是使用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步, 其 有两步它们两个是一样的, 另外两步虽然具体内容不一样, 但是都做做的同一类工作. 现在问题也有了, 当前的设计两个类里面有很多重复的代码, 那么应该怎样设计以减少冗余呢? 把共有的方法...