Asp.net 你能推荐一个.net模板引擎吗?
我正在寻找一个.net模板引擎-一个简单、轻量级、稳定且没有太多依赖项的引擎。目前我所需要的就是创建模板化的纯文本和html电子邮件。谁能给我一个好的推荐 如果有帮助的话——比如Java或库 [更新]Asp.net 你能推荐一个.net模板引擎吗?,asp.net,templates,viewengine,templating-engine,Asp.net,Templates,Viewengine,Templating Engine,我正在寻找一个.net模板引擎-一个简单、轻量级、稳定且没有太多依赖项的引擎。目前我所需要的就是创建模板化的纯文本和html电子邮件。谁能给我一个好的推荐 如果有帮助的话——比如Java或库 [更新] 感谢您迄今为止的回答-非常感谢。当您使用这些库时,我对推荐或战争故事非常感兴趣。这似乎是做出决定的最佳方式,而无需逐一尝试。您是否见过.NET Velocity端口NVelocity? 希望这有帮助 还有几点: (可以使用) 关于NVelocity,它已经被Castle的人分叉了,正在
感谢您迄今为止的回答-非常感谢。当您使用这些库时,我对推荐或战争故事非常感兴趣。这似乎是做出决定的最佳方式,而无需逐一尝试。您是否见过.NET Velocity端口NVelocity? 希望这有帮助 还有几点:
- (可以使用)
- ASP.Net内置Web窗体视图引擎
- 阿斯普维尤
- 咆哮
- NHaml(.Haml的净端口)
- 火花
- 不规则性
- StringTemplate.Net
我推荐。它是一个基于模板的代码生成器,具有不断的更新和活跃的社区。这是CodeSmith生成器附带的一个示例。试试这个:电子邮件模板框架
它在ASP.NET和WinForms下运行良好,目前仍在积极开发中。还有非常好的文档和易于挖掘的示例。我认为是Mustache(http://mustache.github.com/)可能也符合要求。nLocacity虽然很旧,但上一次发布是在2003年,已经足够了。RazorEngine,一个基于微软Razor解析引擎的模板引擎 我没有使用过它,但我觉得它很有趣,因为如果你有ASP.NET MVC背景,你就不需要学习新东西。-独立引擎处于活动开发中,没有依赖关系,fast是一个非常好的.NET模板系统
它源于Ruby的Liquid Markup,要求.NET Framework 3.5或更高版本。以下是对Handlebar、RazorEngine和SharpTAL的一些测试:
namespace ConsoleApplication4
{
class Program
{
static void Main(string[] args)
{
Stopwatch sw = new Stopwatch();
//RAZOR
string razorTemplate = @"@model ConsoleApplication4.Test
<h1>@Model.Title</h1>
@if(Model.Condition1)
{
<span>condition1 is true</span>
}
<div>
@foreach(var movie in Model.Movies)
{<span>@movie</span>}
</div>";
//burning
Engine.Razor.RunCompile(razorTemplate, "templateKey", typeof(Test), new Test());
sw.Start();
var result1 = Engine.Razor.RunCompile(razorTemplate, "templateKey", typeof(Test), new Test());
sw.Stop();
Console.WriteLine("razor : "+sw.Elapsed);
//SHARPTAL
string sharpTalTemplate = @"<h1>${Title}</h1>
<span tal:condition=""Condition1"">condition1 is true</span>
<div tal:repeat='movie Movies'>${movie}</div>";
var test = new Test();
var globals = new Dictionary<string, object>
{
{ "Movies", new List<string> {test.Movies[0],test.Movies[1],test.Movies[2] } },
{ "Condition1", test.Condition1 },
{ "Title", test.Title },
};
var tt = new Template(sharpTalTemplate);
tt.Render(globals);
sw.Restart();
var tt2 = new Template(sharpTalTemplate);
var result2 = tt2.Render(globals);
sw.Stop();
Console.WriteLine("sharptal : " + sw.Elapsed);
//HANDLEBARS
string handleBarsTemplate = @"<h1>{{Title}}</h1>
{{#if Condition1}}
<span>condition1 is true</span>
{{/if}}
<div>
{{#each Movies}}
<span>{{this}}</span>
{{/each}}
</div>";
var tt3 = Handlebars.Compile(handleBarsTemplate);
sw.Restart();
var result3 = tt3(new Test());
sw.Stop();
Console.WriteLine("handlebars : " + sw.Elapsed);
Console.WriteLine("-----------------------------");
Console.WriteLine(result1);
Console.WriteLine(result2);
Console.WriteLine(result3);
Console.ReadLine();
}
}
public class Test
{
public bool Condition1 { get; set; }
public List<string> Movies { get; set; }
public string Title { get; set; }
public Test()
{
Condition1 = true;
Movies = new List<string>() { "Rocky", "The Fifth Element", "Intouchables" };
Title = "Hi stackoverflow! Below you can find good movie list! Have a good day.";
}
}
}
命名空间控制台应用程序4
{
班级计划
{
静态void Main(字符串[]参数)
{
秒表sw=新秒表();
//剃刀
字符串razorTemplate=@“@model ConsoleApplication4.Test
@模型名称
@如果(模型条件1)
{
条件1是正确的
}
@foreach(Model.Movies中的var movie)
{@movie}
";
//燃烧
RunCompile(razorTemplate,“templateKey”,typeof(Test),newtest());
sw.Start();
var result1=Engine.Razor.RunCompile(razorTemplate,“templateKey”,typeof(Test),new Test());
sw.Stop();
控制台写入线(“剃刀:+sw.appead”);
//夏普塔尔
字符串sharpTalTemplate=@“${Title}
条件1是正确的
${movie}”;
var测试=新测试();
var globals=新字典
{
{“电影”,新列表{test.Movies[0],test.Movies[1],test.Movies[2]},
{“Condition1”,test.Condition1},
{“Title”,test.Title},
};
var tt=新模板(sharpTalTemplate);
tt.Render(全球);
sw.Restart();
var tt2=新模板(sharpTalTemplate);
var result2=tt2.Render(全局);
sw.Stop();
控制台写入线(“sharptal:+sw.passed”);
//车把
字符串handleBarsTemplate=@{{Title}
{{#如果条件1}
条件1是正确的
{{/if}
{{{每部电影}
{{this}}
{{/每个}}
";
var tt3=handlebar.Compile(handlebar模板);
sw.Restart();
var result3=tt3(新测试());
sw.Stop();
控制台写入线(“把手:+sw.E”);
Console.WriteLine(“-------------------------------”;
控制台写入线(结果1);
控制台写入线(结果2);
控制台写入线(结果3);
Console.ReadLine();
}
}
公开课考试
{
公共布尔条件1{get;set;}
公共列表电影{get;set;}
公共字符串标题{get;set;}
公开考试()
{
条件1=真;
Movies=新列表(){“Rocky”,“第五元素”,“Intouchables”};
Title=“嗨,stackoverflow!在下面您可以找到好电影列表!祝您度过愉快的一天。”;
}
}
}
结果:
- {n}
是的-谷歌发现了这一点,但它看起来并不活跃。从2003年起就没有了。你用过它吗?它由Castle在分叉。你用过第一个链接中列出的任何库吗?谢谢你的mausch。你对NVelocity有什么问题吗?是的,有一些小问题,例如这个问题:所有的链接几乎都死了…@实际上只有一个,我想这对于一个7年前的答案来说是相当不错的。维护也很重要。已经有一个回程机器:)链接已断开,新的已断开-这是一些依赖项,以及
<ul>
<c:for-each name='n' in='System.Linq.Enumerable.Range(1, 5)' expand-text='yes'>
<li>{n}</li>
</c:for-each>
</ul>