2013-06-28 32 views
0

我按照this blog post中的說明爲我的_layout.cshtml文件創建了強類型的視圖模型,因爲我討厭使用ViewBag。這是我的基本控制器,我的所有其他控制器繼承:我的佈局視圖將無法識別我的BaseModel對象

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); 
    } 
} 

所有我想要做的就是抓住一個所謂的「主題」的查詢字符串變量並增加它的價值就BaseViewModel Theme屬性。根據博客文章,我應該能夠在佈局視圖中執行@ModelBase.Theme,但我沒有獲得任何智能感知,並且在運行時會引發錯誤。

回答

0

必須使用@model BaseViewModel才能在視圖中強制鍵入模型。然後你可以使用@Model.Theme

+0

所有這一切確實是類型的視圖'BaseViewModel'。該模型實際上並沒有被填充。請記住,這是一個佈局視圖。 – Chev