Asp.net mvc 将TempData从操作筛选器传递到操作
我一直在尝试使用以下方法将TempData从ActionFilter传递到action: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
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。答案很好地解决了这个问题!