2010-08-24 29 views
0

我試圖在ASP.NET中首次實現重定向後。假設我的業務對象可能需要幾秒鐘到幾分鐘才能完成,按什麼順序以及使用什麼語法?如何通過「POST後重定向」模式使用ASP.NET? [編輯]

例如:

  1. 網友發帖的

  2. 服務器發出的Server.Transfer或Response.Redirect的

  3. 服務器做一些事情,需要一兩角分鐘的Thread.Sleep

處理這種情況的最佳方法是什麼?

+0

您是否希望用戶知道他提交的結果,以防失敗? – Holystream 2010-08-24 16:42:05

+0

可能的重複[Server.Transfer Vs. Response.Redirect](http://stackoverflow.com/questions/224569/server-transfer-vs-response-redirect) – 2010-08-24 16:42:28

+0

@Nathan泰勒:不是重複的......雖然這是有幫助的,但似乎我需要響應。重定向在「重定向後」模式,但我不確定步驟?我應該不是將#2與#3顛倒過來?我只是假設這是正確的序列 – LamonteCristo 2010-08-24 17:20:03

回答

2

在這種情況下,最好是堅持使用Response.Redirect(),以便用戶的客戶端發出重定向,而不是Server.Transfer(),它執行純服務器端重定向到不同的上下文。

關於需要用戶等待的過程,您可能希望使用某種異步實現,其中耗時的操作放在後臺線程中;與此同時,用戶不是在空白的加載屏幕上等待,而是將Response.Redirect()給予「處理」頁面,輪詢服務器以完成當前操作並更新用戶。要增加波蘭語,請考慮實施類似Facebook的圖片上傳工具,在用戶繼續正常使用網站的同時,在屏幕的角落放置進度條。

+0

你有關於如何添加波蘭語的提示嗎? JavaScript只是輪詢一個WCF服務(或等價)? – LamonteCristo 2010-08-24 17:46:01

+1

確切地說,服務器會有某種Web方法,用於檢索當前正在執行的進程的進度並將其返回給JavaScript。從那裏JavaScript會簡單地更新其進度欄。您可以使用JavaScript setInterval()指示客戶端每隔幾秒輪詢一次服務器以獲取當前進度。對另一個問題的這個答案有一個[如何用JavaScript實現輪詢過程]的例子(http://stackoverflow.com/questions/3526955/displaying-post-data-with-jquery/3527018#3527018)。 – 2010-08-24 17:54:10

+0

最後,在重定向之後放置bizlogic以避免雙重提交會有意義嗎?似乎有可能發生...... – LamonteCristo 2010-08-24 20:21:46

1

從我所看到的,你需要做的:

  1. 用戶張貼形成以服務器腳本
  2. 服務器做一些事情,需要使用的Thread.Sleep
  3. 服務器發出響應一兩分鐘。重定向

但是,這裏顯而易見的缺點是用戶在服務器做某些工作時一直在等待(兩分鐘是很長的延遲時間,他們可能會認爲某事出錯了),並且可能你可能會在瀏覽器上發出HTTP請求超時。

在代碼方面,這是非常簡單的:

  1. 這是一個標準<FORM METHOD="POST">
  2. 什麼就做什麼,你需要做的,不能看,你爲什麼會在此刻需要的Thread.Sleep;您不想在服務器端處理完成後立即重定向?
  3. 呼叫Response.Redirect("mypage.aspx")執行GET

這是否幫助?

+0

Huggil Thread.Sleep只是模擬後端進程,需要一些時間才能完成.. – LamonteCristo 2010-08-24 17:43:36

+0

是的,謝謝...似乎BizLogic總是在重定向之前運行在任何情況下。 – LamonteCristo 2010-08-24 17:51:10

相關問題