我有一个使用
的按钮OnClientClick="document.forms[0].target = '_blank'; window.setTimeout(fixform, 500);"
允许OnClick
事件到Response.Redirect
到新窗口。 “fixform”将目标恢复正常。当一切按计划进行时,这很有效。在OnClick事件上抛出异常时,如何阻止它打开新窗口?我已经尝试了Thread.Sleep 500ms以便表单自行修复,但它仍然会在新窗口中打开当前页面,但有例外。
答案 0 :(得分:0)
如果在OnClick事件上抛出异常,如何阻止它打开新窗口?
您没有,因为在新窗口打开之前它才会执行该事件。客户端代码和服务器端代码在完全不同的机器上完全不同的时间执行。例如,Thread.Sleep()
在请求已经发出后在服务器上发生。这里发生的事情是:
在不了解更多有关此处实现的整体结构和用户体验的情况下,很难提供建议。发生错误时应该发生什么?可以更有意义地处理错误,以便在新窗口中显示至少一些有用的内容吗? (也就是说,异常本身不应该在新窗口中可见,并且永远不应该对用户可见,而是一些处理它的页面。)
如果您希望在出现错误时关闭新窗口,那么一种可能是在发生错误时向页面发出类似这样的JavaScript:
window.close();
这样,如果没有错误,窗口保持打开状态。但是如果出现错误,客户端代码会关闭窗口。 (由于服务器端代码无法关闭窗口,在这种情况下确实没有“窗口”的概念。)
答案 1 :(得分:0)
OnClick
方法转换为WebMethod
,返回网址而不是重定向到它。WebMethod
事件从JavaScript调用OnClientClick
,返回true / false以仅在调用成功时触发OnClick
,如果调用成功则更新隐藏字段值OnClick
事件Response.Redirect
到隐藏字段值