[技术散分]Asp.Net表示层方案(借助NVelocity模板引擎)

NqIceCoffee 2009-09-22 10:12:16
由于工作中常常需要使用模板配置文件来做动态的输出

而以前又采用的是Dom解析Xml的方式,导致如果模板中需要一个特殊处理,就得变动代码,以至于现在的不堪重负

不经意的时候,看到了NVelocity模板引擎,感觉很不错,语法很简单,很适合做UI,遂封装了下,现在分享给大家

如果您有任何的建议或者意见,都可以跟帖或者EMail我:NqIceCoffee@163.com

代码不难看懂,直接上代码了:

BaseHandler.cs

using System;
using System.IO;
using System.Web;
using System.Text;
using System.Collections;

using NVelocity;
using NVelocity.App;
using NVelocity.Context;
using NVelocity.Runtime;
using Commons.Collections;

namespace AspNet.App.UI
{
public abstract class BaseHandler : IHttpHandler
{
private static readonly VelocityEngine viewEngine = new VelocityEngine();

static BaseHandler()
{
//TODO:这里的硬编码可以改成配置文件的方式
ExtendedProperties extend = new ExtendedProperties();
extend.AddProperty(RuntimeConstants.COUNTER_NAME, "i");
extend.AddProperty(RuntimeConstants.RESOURCE_LOADER, "file");
extend.AddProperty(RuntimeConstants.INPUT_ENCODING, "utf-8");
extend.AddProperty(RuntimeConstants.OUTPUT_ENCODING, "utf-8");

string appPath = AppDomain.CurrentDomain.BaseDirectory;
extend.AddProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, appPath);

//模板的缓存设置
extend.AddProperty(RuntimeConstants.FILE_RESOURCE_LOADER_CACHE, true); //是否缓存
extend.AddProperty("file.resource.loader.modificationCheckInterval", (Int64)30); //缓存时间(秒)
viewEngine.Init(extend);
}

public HttpContext HttpContext
{
get;
private set;
}

public HttpRequest Request
{
get;
private set;
}

public HttpResponse Response
{
get;
private set;
}

private Hashtable templateData = new Hashtable();
public Hashtable TemplateData
{
get { return templateData; }
}

private string templateFile = string.Empty;
public string TemplateFile
{
get { return templateFile; }
set { templateFile = value; }
}

public void ProcessRequest(HttpContext context)
{
this.HttpContext = context;
this.Request = context.Request;
this.Response = context.Response;

//此方法主要进行数据的获取
Handler_Load(this, EventArgs.Empty);

//输出
IContext ctx = new VelocityContext(templateData);
viewEngine.MergeTemplate(TemplateFile, "utf-8", ctx, context.Response.Output);
}

//局部文件的呈现
protected string Merge(Hashtable data, string fileName)
{
IContext ctx = new VelocityContext(data);
StringBuilder sb = new StringBuilder(512);
StringWriter writer = new StringWriter(sb);

viewEngine.MergeTemplate(fileName, "utf-8", ctx, writer);
return sb.ToString();
}

public abstract void Handler_Load(object sender, EventArgs e);

public bool IsReusable
{
get { return false; }
}
}
}
...全文
1379 74 打赏 收藏 转发到动态 举报
写回复
用AI写文章
74 条回复
切换为时间正序
请发表友善的回复…
发表回复
GeekSmile 2012-07-30
  • 打赏
  • 举报
回复
看不懂,接分了
  • 打赏
  • 举报
回复
做个标记
songhongkai123 2011-01-21
  • 打赏
  • 举报
回复
this.TemplateFile = ViewPath("/user/userMaster.htm");


这句什么意思 这个ViewPath()是什么函数
程序漫步 2009-09-23
  • 打赏
  • 举报
回复
接分
liujintaozyc 2009-09-23
  • 打赏
  • 举报
回复
接分了
lovezhxf 2009-09-23
  • 打赏
  • 举报
回复
帮顶。。
xierfly 2009-09-23
  • 打赏
  • 举报
回复
Lz强 顶一下
昕颖 2009-09-23
  • 打赏
  • 举报
回复
学习了。先接分。
staywithc 2009-09-23
  • 打赏
  • 举报
回复
先mark一下。有时间再看
冷眼1983 2009-09-23
  • 打赏
  • 举报
回复
学习,希望老天可以眷顾我
dengxiao1981 2009-09-23
  • 打赏
  • 举报
回复
学习
cabps 2009-09-23
  • 打赏
  • 举报
回复
学习兼接分,感谢分享。
ximengchang 2009-09-23
  • 打赏
  • 举报
回复
接分
屌丝女士111 2009-09-22
  • 打赏
  • 举报
回复
我要好好学习下这方面的知识 网上搜了相关知识 学习中 谢谢了
游北亮 2009-09-22
  • 打赏
  • 举报
回复
没用过,有空学习吧
tiger_ok1 2009-09-22
  • 打赏
  • 举报
回复
才接触..
yixianggao 2009-09-22
  • 打赏
  • 举报
回复
多谢分享,留着备用!
dingdong250 2009-09-22
  • 打赏
  • 举报
回复
前一阵用nvelocity,读取编码,utf-8就ok,其他格式就异常,没辙,把模板硬转成utf-8了。
dingdong250 2009-09-22
  • 打赏
  • 举报
回复
偶来哄抢。
wonder888888 2009-09-22
  • 打赏
  • 举报
回复
帮顶,接分
加载更多回复(54)

62,051

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧