惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 叶小钗
爱范儿
爱范儿
WordPress大学
WordPress大学
Last Week in AI
Last Week in AI
博客园 - 聂微东
雷峰网
雷峰网
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 三生石上(FineUI控件)
T
Tailwind CSS Blog
博客园 - Franky
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园_首页
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 司徒正美
月光博客
月光博客
大猫的无限游戏
大猫的无限游戏
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
The Cloudflare Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
人人都是产品经理
人人都是产品经理
宝玉的分享
宝玉的分享
罗磊的独立博客
Jina AI
Jina AI

博客园 - 分享 共赢

大爱,netbeans的远程开发 lvs + keepalived udp小结 将watin的ui单元测试集成到cc.net 命令行发布web项目 Microsoft © SilverlightTM Release History 针对sl的ICSharpCode.SharpZipLib,只保留zip,gzip的流压缩、解压缩功能 不同IComparer对数组排序Array.Sort,Linq orderby的性能的影响 c# 编译器优化的功劳?与泛型有关的代码的疑惑 高效获取某个数字的最后2位 centos asp.net运行环境配置 扣出MSLinqToSQLGenerator的基类,可用于开发自定义工具(custom tool) [转]我在微软做PM ... Linq to sql 简单性能差异指引 April Rosario(vs2010?) CTP now available! 手工杀毒利器 在form上设定了defaultbutton属性之后,切换提交按钮的解决办法 在form上设定了defaultbutton属性之后,切换提交按钮的解决办法 Bingo Day-展示自我,共享成功! 使用System.Net.Mail发送邮件,vs2005与vs2008存在差别?
web项目下,甩开RazorTemplateEngine做模板处理
分享 共赢 · 2012-05-18 · via 博客园 - 分享 共赢

模板处理,一般有自定义文本替换、T4、RazorTemlpateEngine

相对来讲T4成熟一些,毕竟也发展了几个版本,与vs集成,协作程度毕竟高,但是默认情况下没智能提示,免费的智能提示插件还不够好

而RazorTemplateEngine使用Razor语法,有相当大的亲和力。

因此RazorTemplateEngine陪我渡过不少时光。

最近认真了解了mvc中页面生成的处理方式,了解到实际上在web项目下,可以使用内置的方式处理模板文本生成。

其实是挺简单的,代码如下:

View Code

public static string ProcessTemplate<T>(string virtualPath, string baseUrl, T model)
        {
            using (var writer = new System.IO.StringWriter())
            {
                var request = new HttpRequest(virtualPath, baseUrl + virtualPath, null);
                var response = new HttpResponse(writer);
                var context = new HttpContextWrapper(new HttpContext(request, response));
                var type = BuildManager.GetCompiledType(virtualPath);
                var instance = Activator.CreateInstance(type) as WebViewPage;
                var webPageContext = new WebPageContext(context,
                                                    instance,
                                                    model);
                instance.Context = context;
                instance.ViewData.Model = model;
                instance.ViewContext = new ViewContext();
                instance.InitHelpers();

                instance.ExecutePageHierarchy(webPageContext, writer);
                return writer.ToString();
            }
        }

调用方法为

ProcessTemplate("~/Views/Template/Register.cshtml", baseUrl, model)

简单吧

这样处理后,就不再需要使用RazorTemplateEngine了

当然在winform或console项目下RazorTemplateEngine还是蛮有用处的