如果我在ASP.NET MVC中的自定义操作筛选器中创建一个对象,
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
DetachedCriteria criteria = DetachedCriteria.For<Person>();
criteria.Add("stuff");
// Now I need to access 'criteria' from the Action.....
}
是否有任何方法可以从当前正在执行的Action访问对象。
发布于 2009-11-28 00:07:20
我建议将其放入路由数据中。
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
filterContext.RouteData.Values.Add("test", "TESTING");
base.OnActionExecuting(filterContext);
}
public ActionResult Index()
{
ViewData["Message"] = RouteData.Values["test"];
return View();
}
发布于 2012-11-29 02:23:57
Phil Haack描述了better approach。
基本上,这就是你要做的:
public class AddActionParameterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
// Create integer parameter.
filterContext.ActionParameters["number"] = 123;
// Create object parameter.
filterContext.ActionParameters["person"] = new Person("John", "Smith");
}
}
唯一的问题是,如果你正在创建对象参数,那么你的类(在本例中是Person)必须有一个默认的构造函数,否则你会得到一个异常。
下面是如何使用上面的过滤器:
[AddActionParameter]
public ActionResult Index(int number, Person person)
{
// Now you can use number and person variables.
return View();
}
发布于 2009-11-27 22:38:10
您可以使用HttpContext
filterContext.HttpContext.Items["criteria"] = criteria;
你可以在行动中读到它:
[YourActionFilter]
public ActionResult SomeAction()
{
var criteria = HttpContext.Items["criteria"] as DetachedCriteria;
}
https://stackoverflow.com/questions/1809042
复制相似问题