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