我一直在尝试使用以下方法将TempData从ActionFilter传递给操作:
filterContext.Controller.TempData.Add("Key","Value");
但是,似乎没有TempData传递给操作,因为我不断收到Object not referenced to an instance of the object
错误。
这是从ActionFilter将TempData传递给控制器的正确方法吗?如果没有,我该怎么做?
答案 0 :(得分:10)
这将有效: -
回答1:
过滤: -
public class MyCustomAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
filterContext.RouteData.Values.Add("Key","Value");
}
}
控制器: -
[MyCustom]
public ActionResult Index()
{
TempData["Key"] = RouteData.Values["Key"];
return View();
}
回答2:
过滤: -
public class MyCustomAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
filterContext.Controller.TempData.Add("Key","Value");
}
}
控制器: -
[MyCustom]
public ViewResult Index()
{
string Tempval = TempData["Key"].ToString();
return View();
}
答案 1 :(得分:3)
过滤代码:
public class MyWhateverAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
filterContext.Controller.TempData.Add("some key", "some value");
}
}
行动代码:
[MyWhatever]
public ViewResult Index()
{
string value = TempData["some key"] as string;
return View();
}
注意:您必须确保在操作代码之前执行过滤器代码才能传递某些值,这就是为什么OnActionExecuting
是需要重写的方法