しばやん雑記

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

mvcConf @:Japan 反省会

こんにちは、しばやんです。この間の mvcConf @:Japan では激しくテンパってしまいました。Razor はタイプ数が減るよ!と言いましたが、やっぱり書いてもらわないと理解できないですよね?

というわけで書いてください、とりあえず使ってみてください。

さて、セッション前まではこれやろうあれやろうと計画してたんですが、全然出来なかったのでブログでやります(キリッ

@ のエスケープ、メールアドレスについて

@ を出力したい場合には @@ と書いてください。\\ とか書くような感じですね。

メールアドレスに関しては Razor のパーサは賢いので、そのまま書いてもらってもコードとして認識されないようになってます。

実際に Razor で書いたサンプル的な何か

今、MVC 3 と Razor でみにもばをゴリゴリ書いてます。それの一部を見せる予定でした。なので一部を持ってきました。

@model Minimoba.Services.Twitter.TwitterUser

<img src="@Model.ProfileImageUrl" width="128" height="128" alt="@Model.ScreenName" />
<p>
    @Model.Name<br />
    @@@Model.ScreenName @Model.Location
    @if (!string.IsNullOrEmpty(Model.Description))
    {
        <br />@Html.AutoLink(Model.Description)
    }
    @if (!string.IsNullOrEmpty(Model.Url))
    {
        <br /><a href="@Model.Url">@Model.Url</a>
    }
</p>

AutoLink ってのは勝手に作った HTML ヘルパーです。これを表示させるとこんな感じに。


Templated Razor Delegate について

一言だけで終わっちゃったんですが、Razor の記法部分をデリゲートとして持つ方法があります。最近書いてる Razor Deep Dive でも言いましたが、Razor ではラムダ式を多用しています。それのコンパイル結果を Func という型で受け取ります。

// template(new { value1 = "ほげ", value2 = "はう" }) と呼び出せばおk
Func<dynamic, HelperResult> template = @<text>@item.value1 @item.value2</text>;

つまり Func という型を取る引数を定義すれば、Razor のコンパイル結果を使って部分ビューよりもスマートに書けちゃうわけです。

詳しくは Templated Razor Delegates が面白い - しばやん雑記 とかを見てください。