C# 从httpcontext访问viewcontext
我想从httpcontext获取ViewData值。 我的职能: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
[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()
方法中进行数据库调用,但不清楚该值的用途以及您希望对其执行的操作。