2010-12-08 5 views
4

Ich habe viele Leute gesehen, die gerne die NHaml View Engine in ASP.NET MVC verwenden, aber ich frage mich, ob NHaml als universelle Templating-Engine in .NET verwendet werden kann? Ich möchte NHaml aus einer Konsolenanwendung verwenden oder HTML-E-Mail-Vorlagen außerhalb der ASP MVC View Engine-Umgebung generieren. Ist das möglich? Ich habe nirgendwo Codebeispiele gefunden, die zeigen, wie das geht. Vielen Dank!Kann NHaml als Template-Engine für allgemeine Zwecke verwendet werden? (außerhalb von MVC)

+0

Offenbar Razor das neue View Engine in MVC 3 kann eigenständig ohne ASP.NET für genau die Dinge verwendet werden, die Sie beschreiben. Es hängt also davon ab, wie lose NHaml mit der ASP.NET-Laufzeit verbunden ist. – GiddyUpHorsey

+0

Erarbeiten Sie Ihre Frage, wenn meine Antwort nicht hilft. – jgauffin

Antwort

4

Ja, es kann ohne ASP.Net MVC verwendet werden. Ich benutze es für meinen eigenen Webserver (aber das bedeutet nicht, dass Sie es mit Webservern verwenden müssen).

Check out, wie ich es verwenden hier: http://webserver.codeplex.com/SourceControl/changeset/view/50874#671672

Was Sie kurz etwas tun, wie das ist:

TemplateEngine _templateEngine = new TemplateEngine(); 

// Add a type used in the template. Needed to that nhaml can find it when compiling the template 
_templateEngine.Options.AddReferences(typeof (TypeInYourAssembly)); 

// base class for all templates 
_templateEngine.Options.TemplateBaseType = typeof (BaseClassForTemplates); 

//class providing content to the engine, should implement ITemplateContentProvider 
_templateEngine.Options.TemplateContentProvider = this; 

// compile the template, 
CompiledTemplate template = _templateEngine.Compile(new List<string> {layoutName, viewPath}, 
                   typeof (TemplateImplementation)); 

//create a instance 
var instance = (NHamlView)template.CreateInstance(); 

// provide the view data used by the template 
instance.ViewData = viewData; 

// render it into a text writer 
instance.Render(writer); 
+0

warum die down vote? – jgauffin

+0

Keine Ahnung, bekam 1+ von mir, um auf den Punkt zu kommen und sehr hilfreich :-) –

0

Neueste NHaml macht es einfacher:

var te = XmlConfigurator.GetTemplateEngine("nhaml.config"); 

    var ct = te.GetCompiledTemplate(new FileViewSource(new FileInfo("period.nhaml")), typeof(Template)); 

    var template = ct.CreateTemplate(); 

    var viewData = new Dictionary<string,object>(); 

    template.ViewData = viewData; 

    template.Render(writer);