什么是模板引擎?说白了就是能够自动替换占位符的替换引擎原理上也就是两个步骤找到》替换但是替换不是简单的替换包括
简单变量替换();
复杂变量替换();
对象变量替换();
键值类型替换();
自定义集合替换();
同时显示多个变量();
模板调用();
给调用模板传参数();
值模板();
简单循环();
交差循环显示();
通过模板交差循环();
条件判断();
从文件中创建模板();
常用的模板引擎StringTemplate和velocity差不多都是按照这种模式来设计的但是这样子真的就是我们需要的吗?我们拿一段典型的StringTemplate的模板代码来看看
首先是在模板文件中
姓名$UserName$ 年龄:$UserValue$
然后是在代码里 User us = new User();
usName = xxsssx;
usValue =;
StringTemplate st = new StringTemplate($UserName$$UserValue$);
stSetAttribute(User us);
ConsoleWriteLine(stToString());
那么我们来和ASPNET本身的代码做一个比较
aspx页面 <asp:Label id=Name runat=Server /><asp:Label id=Mail runat=Server />
aspxcs文件
User us = new User();
usName = xxsssx;
usValue =;
NameText=usName;
MailText=usValue
就我个人来看模板引擎是需要的视图和控制的分离是必要的但是我们要分清楚什么是视图什么是控制是不是视图就不能包含代码和逻辑?肯定答案是否定的因为就算用了StringTemplate你还是需要给它填充数据而给它填充数据的代码仍然是属于视图而不是控制或者有人干脆就当作了模型那么既然这样为什么我们就不能用aspx页面本身来作为模板呢?它可以判断可以循环可以分支可以使用现成的控件比如 <%
if(HelperIsLogin()){
User u=HelperGetLoginedUser();
%>
你的姓名是:<%=uName%>
<%}%>
我们把这种方法和StringTemplate的方法来比较一下
aspx模板 StringTemplate
控件 支持 不支持
复杂显示逻辑 支持 支持(未经测试所有可能性)
编辑器支持 支持 不支持
编译检测 支持 不支持
现在可能有个疑问了aspx的页面怎么作为模板来被调用呢?以访问就直接看到了没办法生成静态页面啊?
其实解决的方法很简单只需要ServerExecute()就可以将执行的aspx页面运行的结果以一个TextWriter返回这样子要怎么处理还不是看我们怎么高兴啦哈哈记得之前有人提过类似方法不过有人可能会质疑那不是还有美工也会?其实回过头一想如果你告诉美工<%=uName%>就是代表用户的姓名那么也不会需要美工学习全套的而其实就美工来说如果学习简单实用都有困难那么学习StringTemplate的全套模板语法和灵活掌握使用方法可能更加让人郁闷如果这些工作都给程序员来完成的话那么已经是程序员熟练掌握的c#语法是不是更加的平易近人呢?况且还可以智能感知菜单和编译检测支持所以我觉得在大多数情况下这种方法是比较爽的一种方式