2016-08-21 74 views
0

在asp.net mvc視圖中,您可以訪問視圖返回的模型。如何獲取視圖外部的視圖模型

如果您不是在視圖本身中,而是在控制器方法完成後運行的另一種方法,那麼將使用什麼[static?]方法來獲取當前視圖的當前模型?

我可以訪問所有的標準對象:會話請求,響應等

我工作圍繞通過加載一個會話變量,但我不喜歡使用會話如果框架已經持有它。

+0

這個方法在什麼地方?什麼時候被調用? – Shyju

+0

它是SiteMap.SiteMapResolve事件的事件處理程序,它發生在視圖中的代碼運行之後,但它全部返回給瀏覽器之前。 – toddmo

+0

爲此創建自定義ActionFilterAttribute,http://www.asp.net/mvc/overview/older-versions-1/controllers-and-routing/understanding-action-filters-cs –

回答

0

您可以創建一個將在MVC請求管道中執行的操作過濾器。如果您想在執行操作方法後執行一些代碼,則可以覆蓋OnActionExecuted方法。

public class MyCustom : ActionFilterAttribute 
{ 
    public override void OnActionExecuted(ActionExecutedContext filterContext) 
    {    
     var viewModel = filterContext.Controller.ViewData.Model; 
     var response = filterContext.HttpContext.Response; 
     var viewBag = filterContext.Controller.ViewBag; 

     // Use any of these as needed 

     base.OnActionExecuted(filterContext); 
    } 
} 

如果你想這對所有的要求,您可以在此過濾器的GlobalFilters集合RegisterRoutes方法內註冊。

GlobalFilters.Filters.Add(new MyCustom());