3
有没有办法从动作过滤器注入引用者动作? 假设我有一个来自动作X的视图。在视图视图中,我称作为动作Y,并且我想再次重定向到动作X.(有多个称为动作Y的X动作)。我认为如果我有一个参数调用referrerAction和一个用前面的动作填充它的动作过滤器可能会很好。可能吗?通过动作过滤器注入引用者动作?
谢谢。
有没有办法从动作过滤器注入引用者动作? 假设我有一个来自动作X的视图。在视图视图中,我称作为动作Y,并且我想再次重定向到动作X.(有多个称为动作Y的X动作)。我认为如果我有一个参数调用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);
}
}
现在,你标记你X与[ReturnPoint]和调用RedirectOrReturn()如果你想返回回操作。
我不使用UrlReferrer,因为它可能是错误的,我无法控制它的值。使用ReturnPoint,您也可以拥有群组,例如[ReturnPoint(“订单”)]和RedirectOrReturn(“订单”)。
当然,你可以在OnActionExecuted中有更多的自动行为 - 例如,它可以检查返回的结果是否是重定向,如果有值,则自动转到返回点。或者你可以用[ReturnPoint(Automatic = true)]来控制它,等等。
他不应该用[ReturnPoint]属性标记Y动作吗? – 2009-10-14 12:05:25
不,他想重定向回X,所以这就是返回点。例如,购物车是退货点,它会调用misc操作,但他们会想要返回到购物车 - 所以我们将购物车/索引标记为[ReturnPoint]。然后,Edit()将调用RedirectOrReturn()。 – queen3 2009-10-14 15:52:33