2009-10-14 61 views
3

有沒有辦法從動作過濾器注入引用者動作? 假設我有一個來自動作X的視圖。在視圖視圖中,我稱作爲動作Y,並且我想再次重定向到動作X.(有多個稱爲動作Y的X動作)。我認爲如果我有一個參數調用referrerAction和一個用前面的動作填充它的動作過濾器可能會很好。可能嗎?通過動作過濾器注入引用者動作?

謝謝。

回答

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); 
     } 
    } 

現在,你標記你X與[ReturnPoint]和調用RedirectOrReturn()如果你想返回回操作。

我不使用UrlReferrer,因爲它可能是錯誤的,我無法控制它的值。使用ReturnPoint,您也可以擁有羣組,例如[ReturnPoint(「訂單」)]和RedirectOrReturn(「訂單」)。

當然,你可以在OnActionExecuted中有更多的自動行爲 - 例如,它可以檢查返回的結果是否是重定向,如果有值,則自動轉到返回點。或者你可以用[ReturnPoint(Automatic = true)]來控制它,等等。

+0

他不應該用[ReturnPoint]屬性標記Y動作嗎? – 2009-10-14 12:05:25

+0

不,他想重定向回X,所以這就是返回點。例如,購物車是退貨點,它會調用misc操作,但他們會想要返回到購物車 - 所以我們將購物車/索引標記爲[ReturnPoint]。然後,Edit()將調用RedirectOrReturn()。 – queen3 2009-10-14 15:52:33