我想从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
的值?
答案 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,
ViewData
在HttpContext
中不可用
所以我改变了逻辑,而不是获得viewdata
的值,而是在动作过滤器中从数据库中获取了数据。