しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

RazorEngine を使う上での Tips

RazorEngine を使ってみる - しばやん雑記 で RazorEngine を使い始めてみたんですが、ASP.NET MVC の Razor との違いにちょいちょい悩むことがあったのでメモします。

文字列をエスケープせずに出力する

通常の Razor でいうところの Html.Raw に相当する機能です。RazorEngine には HTML ヘルパーが存在しないですが、Raw メソッドが TemplateBase クラスに用意されているので、これを使います。

@* エスケープされる *@
@htmlString

@* エスケープされずに出力される *@
@Raw(htmlString)

テンプレートのコンパイル結果をキャッシュする

Razor で書かれているテンプレートは、コンパイルされてからレンダリングが行われるようになっています。このコンパイルを毎回行うのはコストになるので、キャッシュキーを指定することでキャッシュすることが出来ます。

// キャッシュキーを指定すると、テンプレートのコンパイル結果がキャッシュされる
var result1 = Razor.Parse(template, model1, cacheKey);

// 2 回目はキャッシュ済みの結果を使うので速い
var result2 = Razor.Parse(template, model2, cacheKey);

事前にコンパイルした結果を使う

前回では Include で使うために Razor.Compile を使って、予めビューをコンパイルしていましたが、このコンパイルした結果は Razor.Run メソッドを使うことでレンダリング出来るようになっています。

// ビューを予めコンパイルする
Razor.Compile(template, "Template");

// コンパイル済みのビューをレンダリング
var result = Razor.Run(template, model);

レイアウト、セクション

https://github.com/Antaris/RazorEngine/blob/master/src/Core/RazorEngine.Core/Templating/TemplateBase.cs

RazorEngine のビューの基本クラスとなる TemplateBase クラスには Layout や RenderSection などが用意されているので、ASP.NET MVC と同様にレイアウトやセクションを定義して使うことが出来るようになっています。