WebMatrix 3: @ でハマる
執筆日時:
ちょいとログを外部ファイルに吐きたくなって、テキトーにこんなコードを書いてみた。

#App_Code/Logger.cshtml@helper Write(string message) { System.IO.File.AppendAllText( Server.MapPath("~/log.txt"), string.Format("{0}:\t{1}\r\n", DateTime.Now, message) ); }
これを Default.cshtml でテストしてみた。

@{
Logger.Write("冒頭のコードブロック内で記述");
}
<!DOCTYPE html>
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta charset="utf-8" />
<title>マイ サイトのタイトル</title>
<link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" />
</head>
<body>
@Logger.Write("Body 内で記述")
</body>
</html>
結果はというと――

――冒頭のコードブロック内で記述したログは記録されない。「あれ、なんでだろう?」と思って、あちこちごちゃごちゃ弄ってみたのだけど、正解はコレだった。
@{
@Logger.Write("冒頭のコードブロック内で記述");
}

Logger.Write() のまえに @ を足せば実行される。
@{
@(
Logger.Write("冒頭のコードブロック内で記述")
)
}
でもいいのだけど。
しっかし、これ、なぜなんだろう。自分はまだまだ Razor がわかってないな。