有没有办法从动作过滤器注入引荐动作?假设我有一个来自动作 X 的视图。在视图中,我调用动作 Y,我想再次重定向到动作 X。(有多个 X 动作调用动作 Y)。我认为如果我有一个参数调用 referrerAction 和一个用前一个操作填充它的操作过滤器,那会很好。是否可以?
谢谢。
有没有办法从动作过滤器注入引荐动作?假设我有一个来自动作 X 的视图。在视图中,我调用动作 Y,我想再次重定向到动作 X。(有多个 X 动作调用动作 Y)。我认为如果我有一个参数调用 referrerAction 和一个用前一个操作填充它的操作过滤器,那会很好。是否可以?
谢谢。
这是我的做法:
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)] 来控制它,等等。