我有一个表单,一旦完成就会启动一个Response.Redirect来下载文件。我还想在重定向发生之前隐藏表单并显示一个“谢谢”面板,但是在下面的代码中,似乎asp.net引擎只执行重定向而不执行2个任务:
if (success)
{
lblSuccessMessage.Text = _successMessage;
showMessage(true);
}
else
{
lblSuccessMessage.Text = _failureMessage;
showMessage(false);
}
if(success)
Response.Redirect(_downloadURL);
任何想法如何在重定向开始之前强制页面更新?
谢谢堆 格雷格
答案 0 :(得分:2)
您需要一些客户端代码才能进行重定向。
我的偏好是嵌入一些javascript来进行重定向。
因此,隐藏表单,显示消息,并(在最粗糙的级别)使用文字控件向页面添加这样的文本。
<script>
location.href = "http://otherServerName/fileToDownload";
</script>
您可能会发现此重定向发生在您的网页更改显示之前 - 在这种情况下,请在HTML的正文标记中尝试此操作(请注意不同类型的引号):
<body onload='location.href="http://otherServerName/fileToDownload";'>
请记住,每次回帖实际上都是向客户端提供新页面,而不仅仅是更改当前页面上的某些属性(即使ASP.NET努力假装它就像Windows窗体一样)
我个人更喜欢为流程的每个阶段都有一个单独的页面,而不是通过显示/隐藏各个位来尝试在一个页面中执行所有操作 - 但我可能会毫无希望地过时。
编辑:如果他们已禁用javascript,您只需提供下载该文件的链接。
答案 1 :(得分:1)
也许手动发送一个重定向标题,等待几秒钟就可以了吗?
Response.AddHeader("Redirect", "3; URL=" + _downloadURL")
修改强>
再次阅读你的问题之后,我可能会误解你一点。
您似乎想要延迟整个过程,以便显示“谢谢”面板。这留下了两种可能性:
Response.Redirect()
立即重定向。这是更现代的方式。Response.AddHeader()
使用重定向标头方法使该页面自动消失。这有点过时但很可靠。您实际上并不能将两者结合使用,因为对于那些关闭了JavaScript的用户而言,这将是不一致的。
答案 2 :(得分:1)
您不能,因为此操作在服务器发送回客户端之前发生。如果您尝试将文件发送给用户,可以使用Response.Write()将其传输给用户。这将使它们保持在当前页面上,以便您可以向他们显示消息,他们将获得下载提示。
buffer是文件的字节数组
Response.AddHeader("Content-disposition", "attachment; filename=" & myUserFriendlyFileName)
Response.ContentType = "application/octet-stream"
Response.OutputStream.Write(buffer, 0, buffer.Length)
答案 3 :(得分:1)
直接在asp.net中你无法做到这一点,但是一种方法是使用JS(如这里发布的),或者你可以使用加载文件的IFrame下载 - 用户将看到thankyou ,然后打开/保存对话......
答案 4 :(得分:1)
使用javascript隐藏客户端,然后执行重定向,或者执行两次回发:首先回发以隐藏表单并显示感谢信息,第二次执行重定向一旦感谢您已呈现屏幕。
或者,您可以执行javascript window.open,而不是在回发和表单隐藏完成后指向目标的重定向。
答案 5 :(得分:0)
我最后通过abrudtkuh做了一个建议,只是添加了一个成功消息的链接...我还将实现一个javascript重定向来自动开始下载,但我不想完全依赖于javascript,因此页面显示按钮。
感谢所有人的提示 - 你们都摇滚!
欢呼声 格雷格
答案 6 :(得分:-1)
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);
}