首页 > 解决方案 > 从 httpcontext 访问 viewcontext

问题描述

我想从 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
    }
}

如何访问ViewDatafrom的值HttpContext

标签: c#asp.net-mvcviewdata

解决方案


您可以使用 session 将值传递到 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
    }

推荐阅读