Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 你能推荐一个.net模板引擎吗?_Asp.net_Templates_Viewengine_Templating Engine - Fatal编程技术网

Asp.net 你能推荐一个.net模板引擎吗?

Asp.net 你能推荐一个.net模板引擎吗?,asp.net,templates,viewengine,templating-engine,Asp.net,Templates,Viewengine,Templating Engine,我正在寻找一个.net模板引擎-一个简单、轻量级、稳定且没有太多依赖项的引擎。目前我所需要的就是创建模板化的纯文本和html电子邮件。谁能给我一个好的推荐 如果有帮助的话——比如Java或库 [更新] 感谢您迄今为止的回答-非常感谢。当您使用这些库时,我对推荐或战争故事非常感兴趣。这似乎是做出决定的最佳方式,而无需逐一尝试。您是否见过.NET Velocity端口NVelocity? 希望这有帮助 还有几点: (可以使用) 关于NVelocity,它已经被Castle的人分叉了,正在

我正在寻找一个.net模板引擎-一个简单、轻量级、稳定且没有太多依赖项的引擎。目前我所需要的就是创建模板化的纯文本和html电子邮件。谁能给我一个好的推荐

如果有帮助的话——比如Java或库

[更新]
感谢您迄今为止的回答-非常感谢。当您使用这些库时,我对推荐或战争故事非常感兴趣。这似乎是做出决定的最佳方式,而无需逐一尝试。

您是否见过.NET Velocity端口NVelocity?

希望这有帮助

还有几点:

  • (可以使用)
关于NVelocity,它已经被Castle的人分叉了,正在开发中

对于电子邮件,我需要的不仅仅是电子邮件。

来自anltr.org的人们,他们有一个更完整的列表。

  • 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>