有没有办法从动作过滤器中注入引用者动作? 让我说我有一个来自动作X的视图。在视图中我调用动作Y并且我想再次重定向到动作X.(有多个X动作调用动作Y)。我认为如果我有一个参数调用referrerAction和一个用前一个动作填充它的动作过滤器可能会很好。有可能吗?
感谢。
答案 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)]来控制它,依此类推。