首页 文章

Response.Redirect()是否会终止页面功能?

提问于
浏览
1

我有一个简单的问题 . 如果我正在使用Response.Redirect(),假设用户取消重定向,是否会终止所有页面功能?

例如,假装我有一个带有按钮的页面,当按下该按钮时,会弹出一条显示“hi”的消息 . 然后,在代码中的某个点,用户遇到Response.Redirect() . 在浏览器上清除页面之前,他们在浏览器中点击STOP . 然后,他们点击按钮 . 它还会说“hi”,还是页面不起作用?

编辑更多信息:也许我只是不理解答案,但我仍然没有回答我的问题 . 让我重新说一下,更准确一点 .

我有两个按钮,当它们被点击时都执行C#功能 . 其中一个执行Response.Redirect()到另一个页面 . 另一个在消息框中打印"Hi" . 用户按下按钮1. response.redirect开始处理,但在重定向用户之前,他们认为他们犯了错误并且他们在浏览器中点击了STOP按钮 . 用户仍在查看同一网页 . 他们点击按钮#2 . 我的问题是,消息"Hi"弹出了吗? C#功能是否仍然有效?或者在尝试重定向后,后面的代码是不可访问的?

4 回答

  • 0

    Solution
    网络连接速度较慢的用户确实会在较长时间内看到初始页面 . 如果您只是想阻止他们错误地按下这些按钮,您可以创建一个 <div> 来覆盖整个屏幕区域并使用半透明图像将其灰显 . 除非刷新页面,否则用户将无法单击按钮 .

    您可以通过在表单提交上显示jQuery modal dialog来轻松获得此效果,并向用户显示正在保存数据的消息 .

    此解决方案只能防止意外点击 . 如果要防止恶意重复请求,除了模式对话框之外,您还应该跟踪服务器上的应用程序状态并指示已经进行了保存 . 一个简单的会话变量就足以表明这一点 .

    Technical explaination
    Web服务器使用的http协议是无状态的 . 每次向服务器发送请求时,它都会构建您的Page对象以服务此请求并返回回复 . 它不会记得你上次发送的内容 . 如果你需要,你必须自己做 .

    单击"hi"按钮时,在c#代码中设置消息 . 在回复此请求时,服务器将回复成功状态消息 HTTP/1.1 200 OK 作为响应的第一行 . 这告诉浏览器一切正常,它将根据返回的 Content-Type 标头处理响应 .

    单击按钮以重定向到另一页时 . 您的浏览器向第一页发送请求 . 当您执行 Response.Redirect 时,您的服务器会向浏览器发送重定向消息 .

    HTTP/1.1 302 Found
    Location: http://Page2URL
    

    这告诉浏览器必须转到这个新位置才能获得响应 . 浏览器现在向位置 Headers 提到的URL发出新请求并获取响应 .

    用户可以在任何这些阶段中止请求 . 由于http是无状态的,您可以重新提交两个请求或单击另一个按钮并发出新请求 . 服务器将尽职尽责地将它发送到asp.net,就像从未发生任何事情一样,你会收到回复 .

  • 0

    除非浏览器实际上已重定向,或者您已经放置了一些特定代码来使其无效,否则第二个事件完全独立于第一个事件 . 当您单击第二个按钮时,它会向服务器发送一个全新的请求,而之前点击另一个按钮的事实将对它没有任何影响 - 除非您自己明确地跟踪了该事件,否则它甚至都不会请注意之前点击了其他按钮 .

    第二个按钮将正常触发,第二个C#函数将触发 . 在单击第二个按钮,单击第一个按钮,停止浏览器重定向,然后单击第二个按钮之间,浏览器确实不应该看到任何差异 .

  • 1

    Response.Redirect进程通常是:

    • 页面由浏览器加载 - 所有javascript类型的东西就像显示 alert('hi'); 功能一样 .

    • 用户单击导致回发的按钮 .

    • onclick代码,在帖子后面,执行 Response.Redirect ,它向浏览器发送消息以加载不同的页面 .

    • 浏览器加载新页面(转到1) .

    如果是用户单击3到4之间的STOP,然后将不会加载新页面并且旧页面仍处于活动状态 . 因此,该页面上的任何javascript仍然是可执行的,例如 alert('hi');


    现在,在某些情况下,当涉及Ajax和jQuery时,页面完全有可能进入以前可用的javascript不再起作用的情况;但这并不是你所说的 .

  • 1

    这不是Response.Redirect()的工作方式 .

    当用户单击一个按钮(可能会向服务器发出POST请求)时,客户端将不会发生任何事情,直到它收到服务器的响应 . 如果生成响应的代码调用了Response.Redirect,则响应将是300系列重定向,而不是常规的200页 . 当浏览器收到重定向时,浏览器将为重定向到的位置发出后续GET请求 .

    如果用户在发出POST请求之后但在收到300重定向之前按下“停止”按钮,则浏览器将忽略服务器响应 .

    ...除非你的页面上运行了Javascript,否则它与发出任何其他请求的页面没有什么不同 .

相关问题