ViewBag の使用が嫌いなので、このブログ投稿の指示に従って、_layout.cshtml ファイルの厳密に型指定されたビュー モデルを作成しました。他のすべてのコントローラーが継承するベースコントローラーは次のとおりです。
public class BaseController : Controller
{
protected BaseViewModel ModelBase { get; private set; }
protected override void OnResultExecuting(ResultExecutingContext filterContext)
{
var contextItems = filterContext.HttpContext.Items;
if (contextItems["ModelBase"] == null)
filterContext.HttpContext.Items["ModelBase"] = this.ModelBase;
base.OnResultExecuting(filterContext);
}
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
this.ModelBase = new BaseViewModel
{
Theme = Request.QueryString["theme"] ?? "cyborg"
};
base.OnActionExecuting(filterContext);
}
}
私がやろうとしているのは、「theme」というクエリ文字列変数を取得し、その値を Theme プロパティに追加することだけBaseViewModel
です。ブログ投稿によると、レイアウト ビューで実行できるはずですが@ModelBase.Theme
、インテリセンスが得られず、実行するとエラーがスローされます。