Page のものは Page に、App のものは App に

執筆日時:

たとえば、WebMatrix で作るWebサイトで、Webサイト全体で使える変数や、Webページでのみ参照できる変数というものはどうすれば実現できるのだろう? ―― と思ったのだけど、簡単だった。WebMatrix + Markdown …… リファクタリング。 のコードで言えばこんな感じ。

	@functions {
string ReadTextFile(string path)
{
path = string.Format("/Pages/{0}.txt", path);
path = Server.MapPath(path);

if (!File.Exists(path)) { throw new HttpException(404, path + "is not found."); }

Page.CreatedAt = File.GetCreationTime(path); Page.UpdatedAt = File.GetLastWriteTime(path); // あとで@Page.CreatedAt 、@Page.UpdatedAt で参照できる!

return File.ReadAllText(path); } }

Page は匿名型になっているので、自由にメンバー変数(?)を増やせる。Webサイト全体の場合は、App を使えばいいらしい。たとえば、App.Title にWebサイト名、Page.Titleにページタイトルに突っ込んでおけば、<title>@Page.Title - @App.Title</title> という風にレイアウトファイルでタイトルをセットできる。

僕は初めこの作法を知らなかったから、 App_Code にグローバル変数を保持するヘルパーを書いていた。見る人が見れば当たり前なんだろうけどね……orz