此文完全有感而发,在网上看到很多介绍各类模板引擎的文章,但是我却越来越感觉到很多时候我们所做的事
情是在舍近求远。
什么是模板引擎?说白了就是能够自动替换占位符的替换引擎。原理上也就是两个步骤,找到-》替换。但是替换不是简单的替换,包括:

  • 简单变量替换();
  • 复杂变量替换();
  • 对象变量替换();
  • 键值类型替换();
  • 自定义集合替换();
  • 同时显示多个变量();
  • 模板调用();
  • 给调用模板传参数();
  • 值模板();
  • 简单循环();
  • 交差循环显示();
  • 通过模板交差循环();
  • 条件判断();
  • 从文件中创建模板();

常用的模板引擎,StringTemplate和velocity差不多都是按照这种模式来设计的。但是这样子真的就是我们需要的吗?我们拿一段典型的StringTemplate的模板代码来看看:

首先是在模板文件中:

姓名:$User.Name$ 年龄:$User.Value$

然后是在代码里:

User us = new User();
us.Name = "xxsssx";
us.Value ="80";
StringTemplate st = new StringTemplate("$User.Name$,$User.Value$");
st.SetAttribute("User", us);
Console.WriteLine(st.ToString());

那么我们来和ASP.NET本身的代码做一个比较
aspx页面
<asp:Label id="Name" runat="Server" /><asp:Label id="Mail" runat="Server" />
aspx.cs文件

User us = new User();
us.Name = "xxsssx";
us.Value ="80";
Name.Text=us.Name;
Mail.Text=us.Value

是不是有点感觉用了模板引擎跟脱了裤子放屁没有什么区别?
那么我们为什么要用模板引擎?是真的需要还是赶时髦?
就我个人来看,模板引擎是需要的。视图和控制的分离是必要的,但是我们要分清楚什么是视图,什么是控制。是不是视图就不能包含代码和逻辑?肯定答案是否定的,因为就算用了StringTemplate,你还是需要给它填充数据,而给它填充数据的代码仍然是属于视图而不是控制或者有人干脆就当作了模型。那么既然这样,为什么我们就不能用aspx页面本身来作为模板呢?它可以判断,可以循环,可以分支,可以使用现成的控件。比如

<%
if(Helper.IsLogin()){
User u=Helper.GetLoginedUser();
%>
你的姓名是:<%=u.Name%>
<%}%>

我们把这种方法和StringTemplate的方法来比较一下。

aspx模板    StringTemplate
asp.net控件    支持           不支持
复杂显示逻辑    支持          支持(未经测试所有可能性)
编辑器支持       支持          不支持
编译检测          支持           不支持

现在可能有个疑问了,aspx的页面怎么作为模板来被调用呢?以访问就直接看到了没办法生成静态页面啊?
其实解决的方法很简单,只需要Server.Execute()就可以将执行的aspx页面运行的结果以一个TextWriter返回。这样子要怎么处理还不是看我们怎么高兴啦。哈哈

记得之前有人提过类似方法,不过有人可能会质疑:那不是还有美工也会asp.net?其实回过头一想,如果你告诉美工<%=u.Name%>就是代表用户的姓名,那么也不会需要美工学习全套的asp.net,而其实就美工来说,如果学习简单实用asp.net都有困难,那么学习StringTemplate的全套模板语法和灵活掌握使用方法可能更加让人郁闷。如果这些工作都给程序员来完成的话,那么已经是程序员熟练掌握的c#语法是不是更加的平易近人呢?况且还可以智能感知菜单和编译检测支持。所以我觉得在大多数情况下这种方法是比较爽的一种方式。

PS,现在公司有个java的项目,我也直接让下面的同学直接用jsp页面当作模板,反响不错,大家都觉得很happy:』

从模板引擎到模板引擎-使用aspx页面作为模板引擎的一种实现相关推荐

  1. java 模板引擎_Spring Boot 如何快熟整合Thymeleaf模板引擎

    前面介绍了Spring Boot的优点,然后介绍了如何快速创建Spring Boot 项目.不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/zhangweizhong/ ...

  2. [vue] 你知道vue的模板语法用的是哪个web模板引擎的吗?说说你对这模板引擎的理解

    [vue] 你知道vue的模板语法用的是哪个web模板引擎的吗?说说你对这模板引擎的理解 模板引擎: 负责组装数据,以另外一种形式或外观展现数据. 优点: 可维护性(后期改起来方便): 可扩展性(想要 ...

  3. asp .net 模板引擎 使用 Razor 生成html静态页面

    刚开始不是理解 写完之后 觉得还蛮简单的 分为这几个步骤 1.获取页面模板Html 2.获取数据 3.解析模板和数据,生成静态页Html代码 4.生成静态文件 模板形式是mvc的模式,会mvc 看一下 ...

  4. freemarker ftl模板_效率提升百分之四十,AS模板也太好用了吧

    点击蓝字 轻松关注 CV 工程师你好,以下内容会让你感觉到不适,慎入! 在平时的开发工作中,我们经常将一个地方的代码,复制粘贴到另外一个地方,俗称搬砖,搬砖搬多了,作为一个资深的挨踢民工,难免会总结一 ...

  5. 修改了模板文件tpl如何立即生效_Views视图与模板

    一.概述 用户请求到视图流程: 当有人访问我们django项目的时候 例如127.0.0.1:8000/polls/23,django首先到加载mysite.urls模块 在mysite.urls中发 ...

  6. 2Flask模板2控制代码块3静态文件4模板的继承

    -回顾 Flask是基于python并且依赖jinja2模板引擎的框架. 注册路由:客户端与Flask程序交互 用户在浏览器输入请求地址->request Flask程序接收请求,分析请求地址 ...

  7. 织梦模板没有html,html5模板怎么调用网站后台的数据?HTML5模板没有后台,怎么样转换成织梦模板,,求大神?...

    相关问题 你可以尝试使用第三方软件,比如旺销王自己也在用,关联营销的系统模板样式选择性比较多,而且还可以自定义样式,关键是手机页面展示的关联营销效果也像电脑端一样 原来的模板不用删除,织梦换新模板先上 ...

  8. 在线考试系统html模板,请问谁有在线考试系统的网页模板?

    请问谁有在线考试系统的网页模板? (2017-03-22 22:58:03) 标签: 杂谈 <帝国网站管理系统>英文译为"Empire CMS",简称"Ecm ...

  9. 【前端】20款国外非常漂亮的优秀网站404错误页面HTML模板

    404错误页面是一个非常普遍的现象,该页面的目的是告诉浏览者其所请求的页面不存在或链接错误,同时引导用户使用网站其他页面而不是关闭窗口离开.虽然404错误页面在所难免,但网页设计师们却可以在该页面上做 ...

  10. portainer忘记用户名密码_【20201122】做个用户管理系统(6)——忘记密码页面、重置密码方式页面的模板制作...

    1. 介绍 1.1 介绍 今天福哥跟大家完成忘记密码页面和重置密码方式页面的模板的制作,这里面忘记密码和重置密码方式是一个操作流程的前两步,是连续的表里的设计.这种多步骤表单在的设计需要一些技巧的,我 ...

最新文章

  1. 网络工程师必须具备的素质
  2. 三、oracle 用户管理一
  3. linux之cal命令详解,linux命令大全之cal命令详解(显示日历)
  4. RestTemplate的三种使用方式
  5. pytorch reshape_PyTorch中的contiguous
  6. 球球大作战体验服找不到团战服务器6,球球大作战常见问题汇总 新版本问题解决方法...
  7. linux命令找目录,linux中何种指令可以查看当前所处的目录位置?
  8. VTK模块学习(一)
  9. 初识kbmmw 中的ORM
  10. C. Memory and De-Evolution 逆向思维
  11. 怎样从excel随机抽取多行
  12. Smobiler打包apk安装包——C# 或.NET Smobiler实例开发手机app(四)
  13. Geodatabase
  14. android 播放器封装,Android基于IJKPlayer视频播放器简单封装设计
  15. java大马后门_【猥琐流】制作一个隐藏在黑页下的大马并且添加后门
  16. Android 10 11 删除本地照片方法
  17. 美团脱颖而出的经验_使用条件格式使重要的Outlook邮件脱颖而出
  18. WinRAR(去广告)中文繁体
  19. 知乎上对 国内机器视觉行业的发展的 讨论-经典
  20. 如何关闭手机提醒事项的推送

热门文章

  1. win10常用的小技巧
  2. 集合框架-ArrayList,Vector,Linkedlist
  3. 201803101101_《函数的原始写法》
  4. Python 中全局变量的实现
  5. 第13周 本周个人总结
  6. tablelayout高度问题
  7. ASP.Net本地化/国际化解决方案原理和代码示例
  8. LINQ 实现多字段关联查询 C#
  9. python 【递归 及 二分法】
  10. 数据库操作导入导出以及加快查询速度