将TempData从动作过滤器传递给操作

时间:2014-08-08 06:39:40

标签: asp.net-mvc

我一直在尝试使用以下方法将TempData从ActionFilter传递给操作:

filterContext.Controller.TempData.Add("Key","Value");

但是,似乎没有TempData传递给操作,因为我不断收到Object not referenced to an instance of the object错误。

这是从ActionFilter将TempData传递给控制器​​的正确方法吗?如果没有,我该怎么做?

2 个答案:

答案 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是需要重写的方法