簡體   English   中英

如何在執行Response.Redirect之前顯示/隱藏面板

[英]How to Show/Hide Panels before executing Response.Redirect

我有一個表單,一旦完成就啟動Response.Redirect下載文件。 我還想在重定向發生之前隱藏表單並顯示“謝謝”面板,但是在以下代碼中,似乎asp.net引擎只執行重定向而不執行2個任務:

if (success)
                {
                    lblSuccessMessage.Text = _successMessage;
                    showMessage(true);                        
                }
                else
                {
                    lblSuccessMessage.Text = _failureMessage;
                    showMessage(false);
                }

                if(success)
                    Response.Redirect(_downloadURL); 

知道如何在重定向開始之前強制頁面更新嗎?

謝謝堆Greg

您需要一些客戶端代碼才能執行重定向。

我的偏好是嵌入一些javascript來進行重定向。

因此,隱藏表單,顯示消息,並(在最粗糙的級別)使用文字控件向頁面添加這樣的文本。

<script>
    location.href = "http://otherServerName/fileToDownload";
</script>

您可能會發現此重定向發生在您的頁面更改顯示之前 - 在這種情況下,請在HTML的正文標記中嘗試此操作(請注意不同類型的引號):

<body onload='location.href="http://otherServerName/fileToDownload";'>

請記住,每個回發實際上都是為客戶端提供新頁面,而不僅僅是更改當前頁面上的某些屬性(即使ASP.NET努力假裝它就像一個Windows窗體)

就個人而言,我更喜歡為流程的每個階段都有一個單獨的頁面,而不是通過顯示/隱藏各個位來嘗試在一個頁面中完成所有操作 - 但我可能會毫無希望地過時。

編輯:如果他們已禁用javascript,您可以只提供下載文件的鏈接。

也許手動發送一個Redirect Header,等待幾秒鍾就可以了?

Response.AddHeader("Redirect", "3; URL=" + _downloadURL")

編輯

在再次閱讀你的問題之后,我可能會誤解你一點。

您似乎想要延遲整個過程,以便可以顯示“謝謝”面板。 這留下了兩種可能性:

  • 您可以依靠JavaScript來顯示面板並延遲表單POST。 然后,服務器可以使用Response.Redirect()立即重定向。 這是更現代的方式。
  • 或者您希望完全獨立於JavaScript。 在這種情況下,您必須使服務器在表單POST上顯示中間的“謝謝,單擊此處繼續”頁面,並通過Response.AddHeader()使用Redirect標頭方法使該頁面自動消失。 這有點老式但可靠。

您實際上並不能將兩者結合使用,因為對於那些關閉了JavaScript的用戶而言,這將是不一致的。

你不能,因為這個動作在發送回客戶端之前發生在服務器上。 如果您嘗試將文件發送給用戶,可以使用Response.Write()將其傳輸給用戶。 這將使它們保持在當前頁面上,以便您可以向他們顯示消息,他們將獲得下載提示。

buffer是文件的字節數組

Response.AddHeader("Content-disposition", "attachment; filename=" & myUserFriendlyFileName)
Response.ContentType = "application/octet-stream"
Response.OutputStream.Write(buffer, 0, buffer.Length)

直接在asp.net你不能這樣做,但一種方法是要么使用JS(如在這里發布),或者你可以使用IFrame加載要下載的文件 - 用戶將看到thankyou,然后打開/保存對話...

使用javascript隱藏客戶端,然后執行重定向,或者執行兩次回發:首先回發以隱藏表單並顯示感謝信息,第二次執行重定向,一旦感謝您已呈現到屏幕上。

或者,您可以執行javascript window.open而不是在回發和表單隱藏完成后指向目標的重定向。

我最后通過abrudtkuh做了建議,只是添加了一條鏈接到成功消息...我還將實現一個javascript重定向來自動開始下載,但我不想完全依賴於javascript,因此按鈕被顯示在頁面上。

感謝大家的提示 - 你們都搖滾!

歡呼greg

if (success)
                {
                    lblSuccessMessage.Text = _successMessage;
                    showMessage(true);                        
                }
                else
                {
                    lblSuccessMessage.Text = _failureMessage;
                    showMessage(false);
                }

                if(success) {
                    Threading.Thread.Sleep(200)
                    Response.Redirect(_downloadURL);
                }

您可以通過使線程休眠來強制它在重定向之前等待。

最好的,最友好的用戶選擇是讓用戶通過添加按鈕繼續自己。 例如,您可以執行以下操作:

if (success)
                {
                    lblSuccessMessage.Text = _successMessage + "<br /><INPUT TYPE='button' VALUE='Continue...' onClick='parent.location='" + _downloadURL + "'/>";
                    showMessage(true);                        
                }
                else
                {
                    lblSuccessMessage.Text = _failureMessage;
                    showMessage(false);
                }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM