我按照这篇博文中的说明为我的 _layout.cshtml 文件创建了一个强类型视图模型,因为我讨厌使用 ViewBag。这是我所有其他控制器继承自的基本控制器:
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”的查询字符串变量,并将它的值添加到BaseViewModel
. 根据博客文章,我应该能够@ModelBase.Theme
在布局视图中执行此操作,但我没有得到智能感知,并且在我运行它时会引发错误。