例外,在打开新标签/窗口时停止按钮

时间:2013-12-04 16:15:49

标签: c# asp.net button postback response.redirect

我有一个使用

的按钮
OnClientClick="document.forms[0].target = '_blank'; window.setTimeout(fixform, 500);"

允许OnClick事件到Response.Redirect到新窗口。 “fixform”将目标恢复正常。当一切按计划进行时,这很有效。在OnClick事件上抛出异常时,如何阻止它打开新窗口?我已经尝试了Thread.Sleep 500ms以便表单自行修复,但它仍然会在新窗口中打开当前页面,但有例外。

2 个答案:

答案 0 :(得分:0)

  

如果在OnClick事件上抛出异常,如何阻止它打开新窗口?

您没有,因为在新窗口打开之前它才会执行该事件。客户端代码和服务器端代码在完全不同的机器上完全不同的时间执行。例如,Thread.Sleep()在请求已经发出后在服务器上发生。这里发生的事情是:

  1. 浏览器打开一个新窗口
  2. 新窗口向服务器发出请求
  3. 服务器抛出错误并以错误
  4. 响应请求

    在不了解更多有关此处实现的整体结构和用户体验的情况下,很难提供建议。发生错误时应该发生什么?可以更有意义地处理错误,以便在新窗口中显示至少一些有用的内容吗? (也就是说,异常本身不应该在新窗口中可见,并且永远不应该对用户可见,而是一些处理它的页面。)

    如果您希望在出现错误时关闭新窗口,那么一种可能是在发生错误时向页面发出类似这样的JavaScript:

    window.close();
    

    这样,如果没有错误,窗口保持打开状态。但是如果出现错误,客户端代码会关闭窗口。 (由于服务器端代码无法关闭窗口,在这种情况下确实没有“窗口”的概念。)

答案 1 :(得分:0)

  1. OnClick方法转换为WebMethod,返回网址而不是重定向到它。
  2. 通过WebMethod事件从JavaScript调用OnClientClick,返回true / false以仅在调用成功时触发OnClick,如果调用成功则更新隐藏字段值
  3. OnClick事件Response.Redirect到隐藏字段值