2010-08-19 72 views
2

我想要做的是在MVC站點中渲染視圖,通知用戶在服務器端處理髮生時不刷新瀏覽器。這可能是一個長期運行的任務,如果它們刷新了,它將再次發送請求,從而在進程實際上成功時將它們發送到錯誤屏幕。我打算在JS中執行此操作,無論是使用JQuery $ .ajax(...)還是使用簡單的$(document).ready(function(){window.location = ...});但我希望有一種方法可以在MVC中實現,從而讓我更好地控制返回給客戶端調用的HttpResponseCode。有沒有辦法做到這一點?在MVC中渲染視圖然後立即重定向

我正沿

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

     CallProcess(...) 

     return View(); 
    } 

行思則有一個完成的動作進行重定向

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

或只是有一些看法裏面呈現的是從內部進行重定向查看

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

任何想法?

回答

0

如果不在客戶端上調用某種Javascript,則無法實現此目的。

當您向用戶返回響應時,您可以返回一個頁面以顯示HTTP代碼200(OK),或者使用HTTP代碼301(永久移動)或307(臨時移動)和要重定向到的URL。

您必須選擇這些返回值中的任何一個,並且不能同時返回這兩個值。

最簡單的解決方案是使用Javascript將用戶從「請稍等」頁面重定向到目標,一旦它確定後臺進程已完成。

+0

是的,我認爲你是對的。我希望有一些MVC魔術。我只是做一個window.location,我可以在瀏覽器'GET'上設置我的303〜謝謝 – beatn1ck 2010-08-19 19:21:55

0

一個簡單的解決方案是關閉後臺進程,然後顯示一個頁面(1)要求用戶不要刷新,(2)每隔幾秒鐘通過Javascript輪詢服務器以確定後臺進程是否爲完成,(3)確定完成後重定向。

+0

我仍然會使用js重定向... – beatn1ck 2010-08-19 18:42:47