0

我按照这篇博文中的说明为我的 _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在布局视图中执行此操作,但我没有得到智能感知,并且在我运行它时会引发错误。

4

2 回答 2

1

我认为您需要一个自定义剃须刀视图基类,如 Phil Haack 在此处的帖子中所述:

http://haacked.com/archive/2011/02/21/changeing-base-type-of-a-razor-view.aspx

于 2013-06-28T22:55:36.617 回答
0

您必须使用@model BaseViewModel在视图中强烈键入您的模型。然后你可以使用 @Model.Theme

于 2013-06-28T22:51:58.613 回答