Asp.net mvc 将TempData从操作筛选器传递到操作

Asp.net mvc 将TempData从操作筛选器传递到操作,asp.net-mvc,Asp.net Mvc,我一直在尝试使用以下方法将TempData从ActionFilter传递到action: filterContext.Controller.TempData.Add("Key","Value"); 但是,似乎没有向操作传递TempData,因为我一直在获取未引用对象实例的对象 这是将TempData从ActionFilter传递到控制器的正确方法吗?如果没有,我该怎么做?这将起作用:- 答案1: 过滤器:- public class MyCustomAttribute : ActionFilt

我一直在尝试使用以下方法将TempData从ActionFilter传递到action:

filterContext.Controller.TempData.Add("Key","Value");
但是,似乎没有向操作传递TempData,因为我一直在获取未引用对象实例的
对象

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

这将起作用:-

答案1:

过滤器:-

public class MyCustomAttribute : ActionFilterAttribute
{
  public override void OnActionExecuting(ActionExecutingContext filterContext)
  {
    filterContext.RouteData.Values.Add("Key","Value");
  }
}
public class MyCustomAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        filterContext.Controller.TempData.Add("Key","Value");
    }
}
控制器:-

[MyCustom]
public ActionResult Index()
{
    TempData["Key"] = RouteData.Values["Key"];

    return View();
}
[MyCustom]
public ViewResult Index()
{
    string Tempval = TempData["Key"].ToString();
    return View();
}
答案2:

过滤器:-

public class MyCustomAttribute : ActionFilterAttribute
{
  public override void OnActionExecuting(ActionExecutingContext filterContext)
  {
    filterContext.RouteData.Values.Add("Key","Value");
  }
}
public class MyCustomAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        filterContext.Controller.TempData.Add("Key","Value");
    }
}
控制器:-

[MyCustom]
public ActionResult Index()
{
    TempData["Key"] = RouteData.Values["Key"];

    return View();
}
[MyCustom]
public ViewResult Index()
{
    string Tempval = TempData["Key"].ToString();
    return View();
}
过滤代码:

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
,实际上您的代码似乎对我有效。我正在使用MVC5。如何应用ActionFilter?作为属性?@yevgeny.Chernobrivets:是的,我用它作为我的属性工作。可能您传递给临时数据的值本身为空?@Yevgeniy.Chernobrivets:这不可能。我传递的值与问题中所示的完全相同。我在“public override void OnActionExecuted”中使用它,这可能是IssueEyes.请尝试在OnActionExecuting中使用它,,您不应该使用OnActionExecuted,因为此方法是在操作已经执行(之后)时调用的。尝试改用OnActionExecuting。答案1对我不起作用。但是2。答案很好地解决了这个问题!