2012-01-05 49 views
7

當我使用__doPostBack開始回發時,會創建一個文件並返回給用戶以在HttpContext.Current.Response中進行下載。如何停止刷新客戶頁面的回發

因爲我改變Response,包括它的JavaScript值的頁面不被修改

但是,當我沒有文件輸出時,頁面被刷新(因爲回傳的),並在頁面上的JavaScript修改是丟失。

我該如何'停止'回傳繼續並堅持我目前的頁面?我無法使用異步回發,因爲我需要回發讓用戶下載文件。

編輯:在評論一些問題後更多信息:

  • 該文件要求在web服務請求。 webservice需要 執行大量查詢以確定是否創建文件。 I 寧願這隻發生一次。
  • 用戶可以拖放一些將在文件 請求中使用的過濾器。如果沒有文件可用,用戶應該能夠更改他的過濾器,這就是爲什麼該頁面不應該改變。
+1

第一個是在我腦海中的(未測試):使用隱藏的按鈕爲[PostbackTrigger](http://msdn.microsoft .com/en-us/library/system.web.ui.postbacktrigger.aspx)。在您創建文件的serverside處理程序中(或者不是)到目前爲止,如果您有文件,請註冊javascript以單擊此按鈕。處理此事件並傳遞文件。如果沒有文件,請不要註冊腳本。 – 2012-01-05 16:03:51

+0

它會工作,但我的問題是,該文件是從web服務請求。我不知道在請求完成之前是否會有文件。通過您的解決方案,該文件將被創建兩次。這是一個沉重的要求,可能需要一些時間,所以我寧願不這樣做兩次。 – 2012-01-05 16:11:58

+1

爲什麼您需要創建該文件以確定它是否存在?這聽起來很奇怪。我會添加一個方法到你的web服務中,它會在不創建的情況下進行檢查。 – 2012-01-05 16:14:55

回答

7

從W3標準和RFC 2616:

10.2.5 204無內容服務器已經履行了請求,但不需要返回一個實體主體,並且可能要返回更新 元信息。響應可以包含新的或更新的實體標題形式的元信息,如果存在的話應該與請求的變體相關聯。
如果客戶端是用戶代理,它不應該從導致請求被髮送的文檔視圖中更改它的文檔視圖。該響應是 主要是爲了允許輸入動作來發生,而不 引起變化到用戶代理的活動文檔視圖,雖然 任何新的或更新的元信息應在用戶代理的活動視圖被應用到文檔 目前。 204響應不能包含一個消息體,因此總是以第一個 空行結束。

請注意粗體線在這裏。我沒有自己嘗試過;但是,將HTTP狀態設置爲204併發回空文檔,而不是試圖完全停止回發,這當然值得一試。

祝你好運,我希望這會有所幫助。

編輯:這是做的伎倆代碼:
System.Web.HttpContext.Current.Response.StatusCode = 204;

+0

令人驚歎的..很棒的作品!完全沒有任何解決方法的我的問題的答案 – 2012-01-09 08:29:09

+0

HTTP狀態代碼以拯救!太好了! – 2012-01-11 08:28:22