2010-12-15 10 views
1

Ich möchte die Razor View Engine außerhalb von ASP.NET MVC verwenden, um HTML für E-Mails zu generieren. Ich mag die Syntax und es scheint unnötig, eine andere Template-Engine zu verwenden Habe Rasiermesser in meinem Projekt.Hosting der Razor View Engine mit einem View-Modell

So sah ich mich um und fand diese Anleitung, wie man es tun .. http://blog.andrewnurse.net/2010/11/16/HostingRazorOutsideOfASPNetRevisedForMVC3RC.aspx

Leider kann ich keine Möglichkeit der Angabe eines View-Modell finden, das ist traurig, weil ich möchte wirklich, wirklich wie zu habe selbst für meine E-Mails stark getippte Ansichten.

Gibt es also eine Möglichkeit, Razor-Vorlagen außerhalb von ASP.NET MVC mit stark typisierten View-Modellen zu analysieren oder gibt es so viele Probleme, dass es sich nicht lohnt?

+0

Werfen Sie einen Blick auf http://razorengine.codeplex.com/ für eine vorkompilierte Paket, das Gastgeber Rasierer außerhalb von MVC – Buildstarted

Antwort

2

Die Verwendung des Tags @model ist eigentlich eine Abkürzung für das @ inherits-Tag.

Sie geben die Klasse an, von der Ihre generierte Klasse von der mit @inherits angegebenen Klasse erbt.

Also, wenn Sie @inherits MyTemplate<MyModel>

MyTemplate angeben soll wie folgt aussehen:

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 
    } 

} 

Das Ergebnis aus dem Rasierer-Parsing, müssen Sie kompilieren, und eine Instanz von erstellen.

Nachdem Sie die Instanz erstellt haben, können Sie die Model-Eigenschaft festlegen und Execute aufrufen, um das Ergebnis zu generieren. Wie und was Sie generieren, bleibt Ihnen überlassen.

+0

Danke, funktioniert wie ein Charme. :) – zidar

2

Mit dem letzten stabilen RazorEngine es genug ist

@inherits RazorEngine.Templating.TemplateBase<MyModel> 

angeben, wenn Sie etwas mehr Funktionalität benötigen

+0

Danke, das war genau die Linie, nach der ich suchte, um RazorEngine richtig arbeiten zu lassen! –

Verwandte Themen