1

我有一个简单的问题。如果我使用的是 Response.Redirect(),假设用户取消重定向,这会杀死所有页面功能吗?

例如,假设我有一个带有按钮的页面,当按下该按钮时,会弹出一条消息,上面写着“hi”。然后,在代码中的某个点,用户遇到了 Response.Redirect()。在浏览器上清除页面之前,他们在浏览器中点击了停止。然后,他们点击按钮。它还会说“嗨”,还是该页面无法正常工作?

编辑以获取更多信息:也许我只是不理解答案,但我仍然没有我的问题的答案。让我改写更准确。

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

4

4 回答 4

1

解决方案
网络连接速度较慢的用户看到初始页面的时间会稍长一些。如果您只想防止他们误按这些按钮,您可以创建一个<div>覆盖整个屏幕区域并用半透明图像将其变灰。除非刷新页面,否则用户将无法单击按钮。

您可以通过在表单提交时显示一个jQuery 模态对话框轻松获得此效果,并向用户显示正在保存数据的消息。

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

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

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

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

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

这告诉浏览器它必须到这个新位置才能获得响应。浏览器现在向位置标头提到的 url 发出新请求并获得响应。

用户可以在任何这些阶段中止请求。由于 http 是无状态的,您可以重新提交两个请求中的和,或者单击另一个按钮并发出新请求。服务器将尽职尽责地将其发送到 asp.net,就像什么都没发生一样,您将得到响应。

于 2012-09-11T19:52:20.053 回答
1

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

第二个按钮将正常触发,第二个 C# 函数将触发。在单独单击第二个按钮和单击第一个按钮、停止浏览器重定向然后单击第二个按钮之间,您真的不应该在浏览器中看到任何区别。

于 2012-09-11T08:32:17.610 回答
0

Response.Redirect 过程通常是:

  1. 由浏览器加载的页面 - 所有 javascript 类型的东西alert('hi');都可以正常显示。

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

  3. onclick 代码,在回发中,会Response.Redirect向浏览器发送一条消息以加载不同的页面。

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

如果用户在 3 到 4 之间的某个位置单击 STOP,则不会加载新页面,而旧页面仍处于活动状态。因此,该页面上的任何 javascript 仍然是可执行的,例如alert('hi');


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

于 2012-09-05T21:34:15.827 回答
0

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

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

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

...除非您的页面上运行了 Javascript,但这与发出任何其他请求的页面没有什么不同。

于 2012-09-05T21:34:31.727 回答