Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从httpcontext访问viewcontext_C#_Asp.net Mvc_Viewdata - Fatal编程技术网

C# 从httpcontext访问viewcontext

C# 从httpcontext访问viewcontext,c#,asp.net-mvc,viewdata,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 : ActionFilterAttr

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

ViewData
HttpContext


所以我改变了我的逻辑,而不是获取
viewdata
值,而是从数据库的action filter中获取数据。

viewdata
用于将数据从控制器方法传递到视图。您想做什么?我想根据ViewDataSorry中的数据在LogActionFilter中执行一些附加检查,但这没有意义。首先,您可以在方法中设置值itself@StephenMuecke请参阅更新的问题,正在从数据库设置viewdata值。是的,但您仍在方法本身中设置该值。而且它在
HttpContext
中无论如何都不可用(其目的是将数据从控制器方法传递到视图)。您始终可以在
OnActionExecuting()
方法中进行数据库调用,但不清楚该值的用途以及您希望对其执行的操作。