2011-08-11 4 views
2

일부 동작 방법에서 현재 페이지를 강제로 새로 고치는 결과를 반환하고 싶습니다. 내 액션 메소드에서actionresult 현재 페이지를 새로 고침

public class RefreshResult : ActionResult { 

     public override void ExecuteResult(ControllerContext context) { 
      Uri referrer = context.HttpContext.Request.UrlReferrer; 
      if(referrer == null || string.IsNullOrEmpty(referrer.AbsoluteUri)) { 
       return; 
      } 
      context.HttpContext.Response.Redirect(referrer.AbsoluteUri); 
     } 
    } 

단순히 새로운 RefreshResult을 반환 :

나는이 같은 결과를 얻기 위해 썼다. 그것은 효과가 있지만 그러한 접근 방식의 가능한 한계에 대해 궁금합니다. 나는 고객에게 그러한 결과를 직접적으로 반환하는 액션 메소드에 액세스 할 수있는 옵션을 제공하는 것에 대해 관심이 없다. 따라서 나는 항상 그런 식으로 현재 페이지를 리프레시 할 수있을 것이라고 생각한다. 내가 맞습니까?

나는 이걸 발견 (그리고 다른 질문 몇) 유래에 : ActionResult return to page that called it

하지만이 아니 "방법"에서와 같은 방식의 가능한 제한에 더에 intrested입니다. 사전

+0

처럼 보일 수 있습니다? –

+0

실제로 RedirectToRouteResult를 사용하고 있었지만 경로 값을 제공해야한다는 점이 마음에 들지 않습니다. refreshresult로 리디렉션 할 URL을 알 필요가 없습니다. – objectbox

+0

귀하의 의견을 이해할 수 없습니다. 귀하의 코드에서 당신은 URL redirct RedirectResult는 새로운 RedirectResult (referrer.AbsoluteUri)를 반환하는 URL을 취합니다; 트릭을 할 필요가없는 새로운 클래스를 만들려면 내 포인트 –

답변

2

에서

고맙습니다 난 당신이 "새로 고침 현재 페이지를 강제로 결과"에 의해 의미합니까 무엇 확실하지 않다. 서버에서 작업을 실행중인 경우 이미 페이지를 "새로 고침"합니다.

원본 페이지에서 GET 동작으로 다시 "착륙"하기 위해 어떤 종류의 포스트 리디렉션 패턴을 얻는다면 매우 쉽습니다. RedirectToRouteResult에서 파생 된 사용자 정의 ActionResult 구현 (RedirectToAction에서 사용됨)() 메소드를 사용하여 현재 라우트 값을 제공하십시오.

리퍼러를 기반으로 한 접근 방식은 완전히 나쁘지는 않지만, 리퍼러는 브라우저에서 보낸 헤더이며 일부 클라이언트에서는 선택 사항으로 사용할 수 있습니다 (브라우저에서는 사용할 수 없음). 현재 경로 값은 항상 사용할 수 있습니다.

1

rouen 대답은 페이지를 새로 고치는 한 가지 방법입니다. 다른 하나는 요청을 보낸 URL로 다시 리디렉션하는 것이므로 직접 구현을 작성하지 않아도됩니다. 컨트롤러에서 정상적인 작업을 수행하면됩니다. 단순히 RedirectResult를 사용하는 이유

액션이

public ActionResult SomeAction() 
{ 
    //do some work here... 

    return Redirect(Request.UrlReferrer.ToString()); 
}