繁体   English   中英

从httpcontext访问viewcontext

[英]Access viewcontext from httpcontext

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

如何从HttpContext访问ViewData的值?

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

多亏了斯蒂芬·穆克(Stephen Muecke),

ViewDataHttpContext不可用

因此,我更改了逻辑,而不是获取viewdata值,而是从动作过滤器中的数据库中获取了数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM