2010-12-15 64 views
1

Je souhaite utiliser le moteur de visualisation Razor en dehors d'ASP.NET MVC pour générer du code HTML pour les courriels, j'aime la syntaxe et il semble inutile d'utiliser un autre moteur de template lorsque avoir Razor dans mon projet.Hébergement du moteur de vue Razor à l'aide d'un modèle de vue

J'ai regardé autour et a trouvé ce guide sur la façon de le faire .. http://blog.andrewnurse.net/2010/11/16/HostingRazorOutsideOfASPNetRevisedForMVC3RC.aspx

Malheureusement, je ne peux pas trouver un moyen de spécifier un modèle de vue, ce qui est triste parce que je voudrais vraiment, vraiment à avoir des vues fortement typées même pour mes emails.

Existe-t-il un moyen d'analyser les modèles Razor en dehors d'ASP.NET MVC avec des modèles de vue fortement typés ou est-ce tellement de problèmes que cela ne vaut pas la peine?

+0

Jetez un oeil à http://razorengine.codeplex.com/ pour un paquet préconstruit qui héberge rasoir en dehors de MVC – Buildstarted

Répondre

2

L'utilisation de la balise @model est en fait un raccourci pour la balise @inherits.

Vous spécifiez la classe, votre classe générée héritera de la classe spécifiée avec @inherits.

Donc, si vous spécifiez @inherits MyTemplate<MyModel>

MyTemplate devrait ressembler à:

class MyTemplate<T> { 
    public T Model { get; set; } 

    public abstract void Execute(); 
    public virtual void Write(object value) { 
     WriteLiteral(value); 
    } 

    public virtual void WriteLiteral(object value) { 
     // Actual writing goes here 
    } 

} 

Le résultat de l'analyse de rasoir, vous devez compiler et créer une instance de. Après avoir créé l'instance, vous pouvez définir la propriété Model et appeler Execute pour générer le résultat. C'est à vous de décider comment et ce que vous générez.

+0

Merci, fonctionne comme un charme. :) – zidar

2

Avec la dernière RazorEngine stable, il suffit de spécifier

@inherits RazorEngine.Templating.TemplateBase<MyModel> 

à moins que vous avez besoin de plus de fonctionnalités

+0

Merci, c'était juste la ligne que je cherchais à faire fonctionner RazorEngine! –