[技术散分]Asp.Net表示层方案(借助NVelocity模板引擎)
由于工作中常常需要使用模板配置文件来做动态的输出
而以前又采用的是Dom解析Xml的方式,导致如果模板中需要一个特殊处理,就得变动代码,以至于现在的不堪重负
不经意的时候,看到了NVelocity模板引擎,感觉很不错,语法很简单,很适合做UI,遂封装了下,现在分享给大家
如果您有任何的建议或者意见,都可以跟帖或者EMail我:NqIceCoffee@163.com
代码不难看懂,直接上代码了:
BaseHandler.cs
- C# code
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; } } }}[解决办法]
不太明白!
[解决办法]
接分,感谢分享
[解决办法]
不错呀,收藏!
[解决办法]
没用过,我去网上找找,先接分
[解决办法]
先接分 再慢慢看
------解决方案--------------------
先接分 再慢慢看
[解决办法]
不错
[解决办法]
支持分享。
[解决办法]
先接分
[解决办法]
jfjfjf
[解决办法]
帮LZ顶先
[解决办法]
基于HttpHandler的处理
对全站页面模版统一化、编码统一管理很有好处
up
[解决办法]
[解决办法]
good
[解决办法]
支持!
[解决办法]
没用过的人恐怕不太好理解楼主的代码,呵呵。
这个模板让人头痛的是语法元素不太多,类型概念比较模糊,其他都非常不错了,至少我用起来基本要求都能达到。
[解决办法]
学习加顶~~~
[解决办法]
顶起 顶起
[解决办法]
谢谢楼主分享!不过还是有点看不懂哎!!!!
[解决办法]
[解决办法]
收藏
[解决办法]
帮顶,接分
[解决办法]
帮顶,接分
[解决办法]
帮顶,接分
[解决办法]
才接触..
[解决办法]
没用过,有空学习吧
[解决办法]
我要好好学习下这方面的知识 网上搜了相关知识 学习中 谢谢了
[解决办法]
学习+接分
[解决办法]
顶一个
[解决办法]
用模板引擎的语言是非常幽默的事。
aspx 页面自己就可以使用c#,VB.net等等语言了。
健壮性、性能肯定是超过XX 模板引擎的。
[解决办法]
模板这个东西让我很困惑
写个html页,加上一些代表内容的标签,就是模板了,这些标签相当于aspx里的 <%= %> 或 <%# %> 调用,只不过在设计里要比aspx页要直观一点,但是很多时候事情不是这么简单的,你需要在模板里加上循环和条件判断,来控制如何显示这些标签,从这时候起,模板就不是模板,而是脚本了,一个绝对不可能有aspx强大的脚本
[解决办法]
[解决办法]
诶,看不懂,看来得多下功夫啊!
[解决办法]
学习了
[解决办法]
jf
[解决办法]
学习了
------解决方案--------------------
[解决办法]
正在看,先接分
[解决办法]
多谢!
[解决办法]
不太懂
[解决办法]
不太懂
[解决办法]
jf
[解决办法]
[解决办法]
支持
[解决办法]
收藏
[解决办法]
不错,学习了
[解决办法]
学习~
[解决办法]
先收了,有时间时慢慢看