从httpcontext访问viewcontext

时间:2018-08-17 06:50:50

标签: c# asp.net-mvc viewdata

我想从httpcontext获取ViewData值。 我的功能:

[LogActionFilter]
public ActionResult Edit(int id = 0)
{
    var obj = getObjFromDb(id);
    ViewData["abc"] = obj.name;
    return View(obj);
}

我要在其中访问ViewData值的操作过滤器:

public class LogActionFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var a= filterContext.HttpContext.Items["abc"]; //null
        var b = filterContext.HttpContext.Request.RequestContext.HttpContext.Items["abc"]; //null
    }

    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        var a= filterContext.HttpContext.Items["abc"]; //null
        var b = filterContext.HttpContext.Request.RequestContext.HttpContext.Items["abc"]; //null
    }
}

如何从ViewData访问HttpContext的值?

2 个答案:

答案 0 :(得分:0)

您可以使用会话将值传递到OnActionExecuted过滤器中。但是,您无法将任何内容从操作传递到OnActionExecution,因为它是在操作之前执行的。

 [LogActionFilter]
  public ActionResult Edit(int id = 0)
  {
    var obj = getObjFromDb(id);
    Session["abc"] = obj.name;
    return View(obj);
  }

在过滤器中:

public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        var a = filterContext.HttpContext.Session["abc"];
        /// a should have a value
    }

答案 1 :(得分:0)

感谢Stephen Muecke,

  

ViewDataHttpContext中不可用

所以我改变了逻辑,而不是获得viewdata的值,而是在动作过滤器中从数据库中获取了数据。