2011-05-10 56 views
1

對於我的asp.net mvc的項目,每當我回一個觀點,我追加幾個屬性的一個基本控制器通過重寫OnActionExecuted方法,像這樣:擴展ASP.NET MVC的ViewResult與自定義屬性

protected override void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     if(filterContext.Result.GetType() == typeof(ViewResult)) 
     { 
      var action = filterContext.Result as ViewResult; 
      action.ViewBag.ClientSettings = ClientSettings; 
     } 

     base.OnActionExecuted(filterContext); 
    } 

我目前將ClientSettings粘貼在ViewBag中,然後在視圖中從視圖中訪問它。

我真的很喜歡動作本身直接在ViewResult上擁有ClientSettings屬性,這樣我就可以直接從視圖中訪問它,但我不太確定如何做到這一點?

回答

1

我們使用強類型視圖並存儲像您在模型屬性中描述的內容。

你的情況下(基本控制器代碼):

protected override void OnActionExecuted(ActionExecutedContext filterContext) 
{ 
    var viewModel = filterContext.Controller.ViewData.Model as ViewModelBase; 
    if (viewModel != null) 
    { 
     viewModel.ClientSettings = ClientSettings; 
    } 

    base.OnActionExecuted(filterContext); 
} 

現在,如果您的視圖模型從ViewModelBase繼承,您可以通過的ViewPage<T>Model屬性設置爲從基本控制器和訪問它在您的觀點ClientSettings。

+0

謝謝...我認爲這是我必須採取的方法......這不完全是我之後的,但它會做的。 – lomaxx 2011-05-10 06:27:01

相關問題