2016-08-21 85 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()); 
相关问题