2010-08-19 2 views
2

내가하려는 것은 MVC 사이트의 뷰를 렌더링하여 서버 측 프로세싱이 진행되는 동안 사용자가 브라우저를 새로 고침하지 못하도록합니다. 이것은 장기간 실행되는 작업 일 수 있으며 새로 고침을 누르면 요청을 다시 보내 프로세스가 실제로 성공했을 때 오류 화면으로 보냅니다. JS에서 JQuery $ .ajax (...) 또는 간단한 $ (document) .ready (function() {window.location = ...})를 사용하여이 작업을 수행하려고했습니다. 하지만 MVC에서이를 수행하는 방법이 있기를 바라고 있었기 때문에 HttpResponseCode에 대한 제어권을 클라이언트 호출로 반환했습니다. 이것을 할 수있는 방법이 있습니까?MVC의 뷰 렌더링 후 바로 리디렉션

나는 다음 완료 조치 리디렉션을

public ActionResult LoadingCompleted() 
    { 
     LongRunningProcess(); 
     return Redirect("http://yourdone.com"); 
    } 

을 수행해야하거나 내부에서 리디렉션을 수행 할 뷰의 내부 렌더링 뭔가를

public ActionResult LoadingAsync(string UserKey, string userInf) 
    { 
     AsyncManager.OutstandingOperations.Increment(); 

     CallProcess(...) 

     return View(); 
    } 

의 라인을 따라 생각하고 있었다 보기

<% Html.RenderAction("Process"); %><!--This won't actually redirect--> 

아이디어가 있으십니까?

답변

0

클라이언트에서 일종의 Javascript를 호출하지 않고이를 수행 할 방법이 없습니다.

사용자에게 응답을 보내면 HTTP 코드 200 (OK) 또는 HTTP 코드 301 (영구 이동) 또는 307 (일시 이동 됨)으로 표시 할 페이지를 반환합니다) 및 리디렉션 할 URL을 지정합니다.

이러한 반환 값 중 하나를 선택해야하며 둘 다 반환 할 수 없습니다.

가장 간단한 해결책은 Javascript를 사용하여 백그라운드 프로세스가 완료되었다고 판단되면 "기다려주십시오"페이지에서 대상으로 사용자를 리디렉션하는 것입니다.

+0

네가 맞다고 생각해. 나는 MVC 마법을 ​​바라고 있었다. 나는 창만 할거야. 내가 303 번 브라우저를 'GET'으로 설정할 수있는 위치 ~ 고마워. – beatn1ck

0

한 가지 간단한 해결책은 백그라운드 프로세스를 시작한 다음 (1) 사용자에게 새로 고치지 말 것을 요청하는 페이지를 표시하는 것입니다. (2) 자바 스크립트를 통해 수초마다 서버를 폴링하여 백그라운드 프로세스가 있는지 확인하십시오. 완료되고 (3) 완료되었다고 판단되면 리디렉션됩니다.

+0

나는 여전히 js 리다이렉트를 사용할 것입니다 ... – beatn1ck