我的布局视图无法识别我的BaseModel对象

时间:2013-06-28 22:42:34

标签: c# asp.net asp.net-mvc asp.net-mvc-4 razor

我按照this blog post中的说明为我的_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上的Theme属性中。根据博客文章,我应该可以在布局视图中执行@ModelBase.Theme但是我没有智能感知,并且在运行它时会抛出错误。

2 个答案:

答案 0 :(得分:1)

我认为你需要一个自定义的剃刀视图基类,如Phil Haack的帖子所述:

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

答案 1 :(得分:0)

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