【发布时间】:2010-11-09 17:08:15
【问题描述】:
是否可以将asp.net页面中的response.redirect延迟5秒?
类似 delay.response.redirect("myURL.aspx")
我需要在页面重定向之前运行一个 jquery 动画。
如果我能提供帮助,我不想使用元刷新,但如果这是唯一的方法或最好的方法,请告诉我。
谢谢
【问题讨论】:
是否可以将asp.net页面中的response.redirect延迟5秒?
类似 delay.response.redirect("myURL.aspx")
我需要在页面重定向之前运行一个 jquery 动画。
如果我能提供帮助,我不想使用元刷新,但如果这是唯一的方法或最好的方法,请告诉我。
谢谢
【问题讨论】:
ScriptManager.RegisterStartupScript(this.UpdatePanel1, this.GetType(), "click", "alert('Cliente cadastrado com sucesso.'); setTimeout(function(){window.location.href ='../../Default.aspx'}, 3000);", true);
【讨论】:
Response.AddHeader("REFRESH", "5;URL=http://redirectPage.aspx")
5 = 延迟秒数。
【讨论】:
如果您发布到服务器,则无法再影响客户端 - 服务器所能做的就是等待。并且在 Web 服务器中休眠非常糟糕 - 耗尽线程池,对性能不利。
您应该做的是延迟客户端。或者,您可以使用 AJAX 发布到该页面 - 这是我更喜欢的一个。使用 ajax 发布到服务器,然后获取响应并等待 5 秒(在 javascript 中),然后再更改 location.href 您甚至可以从服务器读取新位置(从 ajax 调用返回的数据中)
【讨论】:
就在执行 Response.Redirect 之前,添加 System.Threading.Thread.Sleep(5000); 的行
【讨论】:
我在客户端创建了一个超链接,并从服务器控制它的 NavigateURL。然后我等到客户端上的页面加载,从中提取 url 并在一段时间后使用 javascript 启动重定向(您可以等到动画完成):
客户
<asp:Content ID="Head" ContentPlaceHolderID="ContentHead" runat="server">
<script type="text/javascript">
$(document).ready(function () {
redirectUrl = $('#mainbody').find('a').attr('href');
setTimeout(function(){
window.location.replace(redirectUrl);
}, 5000);
});
</script>
</asp:Content>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<div id="mainbody">
<asp:HyperLink ID="redirectUrl" runat="server" Visible="false" />
</div>
</asp:Content>
服务器
redirectUrl.NavigateUrl = "ValentinesDay.aspx";
您可以在 javascript 中对重定向 URL 进行硬编码,但我需要能够从服务器控制它。
【讨论】:
是否可以将asp.net页面中的response.redirect延迟5 秒?
类似 delay.response.redirect("myURL.aspx")
<%
response.write("<body onload=""myFunction()""><script>function myFunction()_
{setTimeout(function newDoc()_
{window.location.assign(""http://www.stackoverflow.com"")},5000);}_
</script>")
%>
【讨论】:
对于非客户端解决方案,即依赖浏览器实现延迟的解决方案,您可以创建一个包含服务器端延迟的代理页面,然后重定向到最终目标页面。
myPostPage.aspx 处理数据然后调用response.redirect("myProxyPage.aspx?d=myDestinationPage.aspx", false)
那么myProxyPage.aspx可以有一个定时器,System.threading.Thread.Sleep("5000"),然后重定向到目标页面:response.redirect(request.querystring("d"), false)
这应该让您的第一页有足够的时间在最后一页被调用之前完成。
【讨论】: