在net中用模版开发,在handler中用到了大量的html代码。为解决这个问题,我可以采用模版引擎(NVelocity)进行开发。
1、首先需要将NVelocity.dll文件放入项目,其次引用。
2、配置更改,
代码如下:
context.Response.ContentType = "text/html"; //1.创建Velocity 引擎(VelocityEngine)并设置属性 VelocityEngine vltEngine = new VelocityEngine(); vltEngine.SetProperty(RuntimeConstants.RESOURCE_LOADER, "file"); vltEngine.SetProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, context.Request.MapPath("~/templates")); vltEngine.Init(); // 2.Velocity 上下文对象设置 VelocityContext vltContext = new VelocityContext(); vltContext.Put("data", "yhb"); // 3.创建模板 Template vltTemplate = vltEngine.GetTemplate("photo.htm"); System.IO.StringWriter vltWriter = new System.IO.StringWriter(); // 4.合并模板和上下文对象,输出 vltTemplate.Merge(vltContext, vltWriter); context.Response.Write(vltWriter.GetStringBuilder().ToString());
将上述代码中需要的部分更改成我需要的配置,1.MapPath中所放路径为htm所在路径,2.vltContext.Put方法中所放为一个键值对,值为想要的信息,如datateble,list等等、、,3.在模版创建中vltEngine.GetTemplate方法中所放为当前要用的模版htm。(file)为以文件方式读取。
3、前台的使用,
前台代码如下:
<head> <title>模版引擎的使用</title> <style type="text/css"> img { 50px; height: 50px; } table { border: 1px solid black; border-collapse: collapse; } table th, table td { border: 1px solid black; } </style> </head> <body> <table> <tr> <th> 编号 </th> <th> 图片 </th> <th> 支持 </th> <th> 反对 </th> <th> 分享 </th> <th> 描述 </th> <th> 作者 </th> </tr> #foreach($jj in $jia.rows) <tr> <td> $!jj.id </td> <td> <img src="$!jj.url" /> </td> <td> $!jj.up </td> <td> $!jj.down </td> <td> $!jj.share </td> <td> $!jj.Description </td> <td> $!jj.author </td> </tr> #end </table> </body>
注意在代码中$是一中语法,在$后面跟上vltContext.Put中建好的键值对的键就可以访问数据了,在NVelocity中只有foreach循环,循环开始时用#foreach结束时用#end。
$键的方式是取值,如果没有该值的话,会在页面上显示原有样式,用取反的方式($!键)这样有值则会显示,没值也不会在页面上显示原有样式。
当$!键后直接跟了一段英文或字母,则NVelocity会讲此次的访问当作一个不存在的键访问,这种情况下可以用$!{键}xiaoxue的语法访问。