しばやん雑記

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

Templated Razor Delegates が面白い

Templated Razor Delegates - You've Been Haacked

Razor はいろいろと拡張されていて面白いですね。C# と HTML の融合具合は VB の XML リテラルを思い出させてくれそうです。

説明やら DefineSection メソッドの引数を見る限り、Razor のテキストブロックはラムダ式やメソッドとして保持されているんでしょう。しかし以下のようにコードブロック中に @ などとテキストブロックとして書くと Func<dynamic, HelperResult> という型で取れるのは驚きですね。Razor はまだまだ奥が深い…。

@{
    // Razor Delegate を Func<T> で受ける
    Func<dynamic, HelperResult> f = @<text>@item</text>;
}

ちなみに @item というのは、プロパティの setter で使われる value と同じように予め用意された特殊な変数で、中には引数の値が入っています。dynamic なので @item.title などと書くこともできますね。

Templated Razor Delegates と呼ばれているように、テンプレート化された状態をデリゲートとして保持していますので、メソッドの引数として利用することが出来るわけですね。

A Better Razor Foreach Loop - You've Been Haacked でも紹介されていますが、ループ処理との相性はよさそうな感じですね。簡単なテンプレートの場合は部分ビューを使う必要はなさそうです。