2010-12-08 57 views
4

J'ai vu beaucoup de gens qui aiment utiliser NHaml View Engine dans ASP.NET MVC, mais je me demande si NHaml peut être utilisé comme un moteur de template générique dans .NET? Je souhaite utiliser NHaml à partir d'une application Console ou pour générer des modèles d'e-mails HTML en dehors de l'environnement ASP MVC View Engine. Est-ce possible? Je n'ai pas trouvé beaucoup d'exemples de code montrant comment faire cela. Merci!NHaml peut-il être utilisé comme moteur de template général? (en dehors de MVC)

+0

Apparemment Razor nouveau moteur de vue dans MVC 3 peut être utilisé autonome sans ASP.NET pour les choses que vous décrivez. Cela dépendra donc de la façon dont NHaml est faiblement couplé avec l'environnement d'exécution ASP.NET. – GiddyUpHorsey

+0

Élaborez votre question si ma réponse n'aide pas. – jgauffin

Répondre

4

Oui, il peut être utilisé sans ASP.Net MVC. Je l'utilise pour mon propre serveur web (mais cela ne signifie pas que vous devez l'utiliser avec des serveurs web).

Découvrez comment je l'utilise ici: http://webserver.codeplex.com/SourceControl/changeset/view/50874#671672

Ce que vous faites en un mot est quelque chose comme ceci:

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

pourquoi le vote à la baisse? – jgauffin

+0

Aucune idée, j'ai 1+ de moi pour être au point et très utile :-) –

0

Dernières NHaml facilite:

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);