[英]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),
ViewData
在HttpContext
不可用
因此,我更改了逻辑,而不是获取viewdata
值,而是从动作过滤器中的数据库中获取了数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.