2009-10-14 3 views
3

액션 필터에서 리퍼러 액션을 삽입하는 방법이 있습니까? 액션 X에서 오는 뷰가 있다고합니다. 다이 뷰에서는 액션 Y를 호출하고 다시 액션 X로 리디렉션하려고합니다 (액션 X를 호출하는 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); 
     } 
    } 

을 지금, 당신은 당신이 [ReturnPoint]와 RedirectOrReturn()를 다시 반환 할 경우 전화로 행동하기 x 표시합니다.

UrlReferrer가 잘못되었거나 그 값을 제어 할 수 없어 UrlReferrer를 사용하지 않습니다. ReturnPoint를 사용하여 그룹을 만들 수도 있습니다 (예 : [ReturnPoint ("주문")] 및 RedirectOrReturn ("주문").

물론 OnActionExecuted에서 더 많은 자동 동작을 수행 할 수 있습니다. 반환 된 결과가 리디렉션인지 확인할 수 있으며 값이 있으면 자동으로 ReturnPoint로 이동합니다. 또는 [ReturnPoint (Automatic = true)]로 제어 할 수 있습니다.

+0

[ReturnPoint] 속성을 사용하여 Y 동작을 표시하면 안됩니까? –

+0

아니요, 그는 다시 X로 리디렉션하려고하므로 반환 지점이됩니다. 예를 들어, 카트가 반환 지점이면 기타 작업이 호출되지만 장바구니로 돌아가고 싶을 것입니다. 따라서 Cart/Index는 [ReturnPoint]로 표시됩니다. 그런 다음 Edit()가 RedirectOrReturn()을 호출합니다. – queen3

관련 문제