读书人

[技术散分]Asp.Net表示层议案(借助NVe

发布时间: 2012-09-13 09:51:52 作者: rapoo

[技术散分]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强大的脚本


[解决办法]
探讨
用模板引擎的语言是非常幽默的事。

aspx 页面自己就可以使用c#,VB.net等等语言了。

健壮性、性能肯定是超过XX 模板引擎的。

[解决办法]
诶,看不懂,看来得多下功夫啊!
[解决办法]
学习了
[解决办法]
jf
[解决办法]
学习了
------解决方案--------------------


探讨
用模板引擎的语言是非常幽默的事。

aspx 页面自己就可以使用c#,VB.net等等语言了。

健壮性、性能肯定是超过XX 模板引擎的。

[解决办法]
正在看,先接分
[解决办法]
多谢!
[解决办法]
不太懂
[解决办法]
不太懂
[解决办法]
jf
[解决办法]

[解决办法]
支持
[解决办法]
收藏
[解决办法]
不错,学习了
[解决办法]
学习~
[解决办法]
先收了,有时间时慢慢看

读书人网 >asp.net

热点推荐