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 がわかってないな。