通过操作过滤器注入引用者操作?

时间:2009-10-14 10:20:01

标签: asp.net-mvc referrer action-filter

有没有办法从动作过滤器中注入引用者动作? 让我说我有一个来自动作X的视图。在视图中我调用动作Y并且我想再次重定向到动作X.(有多个X动作调用动作Y)。我认为如果我有一个参数调用referrerAction和一个用前一个动作填充它的动作过滤器可能会很好。有可能吗?

感谢。

1 个答案:

答案 0 :(得分:2)

我是这样做的:

  public class ReturnPointAttribute : Attribute
  {
  }

  public class BaseController: Controller
  {
      private string returnPointUrl = null;
      protected override void OnActionExecuted(ActionExecutedContext filterContext)
      {
         base.OnActionExecuted(filterContext);
         if (filterContext.ActionDescriptor.IsDefined(typeof(ReturnPointAttribute), true))
            returnPointUrl = filterContext.HttpContext.Request.Url.ToString();
      }
      public ActionResult RedirectOrReturn<T>(Expression<Action<T>> action) where T : BaseController
      {
         return returnPointUrl.IsNullOrEmpty() 
            ? MyControllerExtensions.RedirectToAction(this, action) 
            : (ActionResult)Redirect(returnPointUrl);
      }
   }

现在,您使用[ReturnPoint]标记X操作,如果要返回,则调用RedirectOrReturn()。

我不使用UrlReferrer,因为它可能是错误的,我无法控制它的值。使用ReturnPoint,您还可以拥有组,例如[ReturnPoint(“Orders”)]和RedirectOrReturn(“Orders”)。

当然,您可以在OnActionExecuted中拥有更多自动行为 - 例如它可以检查返回的结果是否为Redirect,如果有值,则自动转到ReturnPoint。或者你可以用[ReturnPoint(Automatic = true)]来控制它,依此类推。