[英]Show ScriptManager.RegisterStartupScript before 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")
編輯
在再次閱讀你的問題之后,我可能會誤解你一點。
您似乎想要延遲整個過程,以便可以顯示“謝謝”面板。 這留下了兩種可能性:
Response.Redirect()
立即重定向。 這是更現代的方式。 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.