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)
Antwort
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);
warum die down vote? – jgauffin
Keine Ahnung, bekam 1+ von mir, um auf den Punkt zu kommen und sehr hilfreich :-) –
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);
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
Erarbeiten Sie Ihre Frage, wenn meine Antwort nicht hilft. – jgauffin