2008-12-04 18 views
48

Estoy buscando un motor de plantillas .net - algo simple, liviano, estable con no demasiadas dependencias. Todo lo que necesito para este momento es crear texto sin formato y correos electrónicos html. ¿Alguien puede darme una buena recomendación?¿Puede recomendar un motor de plantilla .net?

Si sirve de algo, algo así como las bibliotecas Freemarker o Velocity de Java.

[ACTUALIZACIÓN] Gracias por las respuestas hasta ahora, muy apreciadas. Realmente estoy probado en recomendaciones o historias de guerra desde cuando usaste estas bibliotecas. Parece ser la mejor manera de tomar una decisión sin intentar cada uno por turno.

Respuesta

21

Aquí hay un par más:

Sobre NVelocity, se ha bifurcado por los chicos del castillo, que está siendo desarrollado here

Para correos electrónicos, nunca he necesitado más que NVelocity.

+1

Gracias por ese mausch. ¿Has tenido algún problema con NVelocity? – serg10

+0

Sí, hay algunos problemas menores, por ejemplo este: http://forum.castleproject.org/viewtopic.php?t=4781 –

+1

Todos los enlaces están casi muertos ... – Asken

0

¿Has visto NVelocity, un puerto .NET de Velocity? http://nvelocity.sourceforge.net/

+0

Sí - Google ha encontrado eso, sino que doesn' Parece muy activo. Nada desde 2003. ¿Lo has usado? – serg10

+0

es horquillado por Castle en http://www.castleproject.org/castle/projects.html – jhexp

5

más completa Lista

  • ASP.Net formulario Web incorporado Vista Motor
  • ASPView
  • Brail
  • (puerto de .Net Haml)
  • NHaml
  • Spark
  • NVelocity
  • StringTemplate.Net
1

prueba este: Plantilla de correo electrónico Marco http://www.bitethebullet.co.uk/Email_Template_Framework.aspx

Funciona muy bajo ASP.NET y Windows Forms y está todavía en desarrollo activo. También hay muy buena documentación y fácil de excavar en ejemplos.

+1

El enlace está muerto, el nuevo es- http://www.bitethebullet.co.uk/EmailTemplateFramework. aspx – Spongeboy

2

Creo que Moustache (http://mustache.github.com/) también puede encajar.

0

NVELOCITY, aunque es viejo, último lanzamiento en 2003, suficiente.

5

RazorEngine, un motor de plantillas basado en el motor de análisis Razor de Microsoft.

https://github.com/Antaris/RazorEngine

no lo ha usado, pero me resulta interesante porque si tiene un fondo ASP.NET MVC, usted no tendrá que aprender algo nuevo.

+0

Hubo algunas dependencias, y tengo muchos problemas debido al uso de la versión anterior de system.web.razor y razorEngine necesita más nuevo, por lo que en local no tuve problemas debido a los ensamblados de GAC, pero en el servidor remoto :(finalmente Preferí usar otro motor de plantillas en lugar de perder el tiempo con el conflicto de versiones de prueba, etc. – QMaster

0

SharpTAL - motor independiente en desarrollo activo y sin dependencias, rápido

1

DotLiquid es muy agradable sistema de plantillas para .NET.

Se deriva de Ruby's Liquid Markup, con los requisitos de .NET Framework 3.5 o superior.

2

Algunas pruebas con un manillar, RazorEngine y SharpTAL a continuación:

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."; 
    } 
} 


} 

y resultados:

code results

Cuestiones relacionadas