在Response.End之后关闭一个窗口

时间:2010-11-16 20:12:17

标签: asp.net listview response

e.g。我有一个处于编辑模式的ListView表单 发生了一些事情,以便Listview正在使用的表格不再可用 我只是希望能够在用户点击“保存”时关闭窗口。

In Page_Load,我检查表格是否可用,如果没有,我会调用RegisterClientScriptBlock(type,name,"window.close()").但是,处理仍然会发生,并且会转到L istView1_ItemUpdating event

Page_Load中,如果表不存在,我可以调用Response.End来停止处理,但是,由于脚本从未注册,窗口仍然保持不变。

任何方法都可以停止处理并关闭窗口而无需在我的所有方法中进行自定义IsTableValid()检查?

4 个答案:

答案 0 :(得分:3)

Oded提供的答案并不适用于Page_Load,我不知道为什么。 eych提供的答案有效。但是,如果您不想保留额外的html文件并进行重定向,则可以使用以下内容:

Response.Clear();
Response.Write("<script>window.close();</script>");
Response.Flush();
Response.End();

答案 1 :(得分:2)

Flush在结束之前将所有数据发送到浏览器的响应:

RegisterClientScriptBlock(type,name,"window.close()")
Response.Flush()
Response.End()

在注册脚本之前,您可能希望Clear响应,以确保响应缓冲区中没有其他内容。

如果你只想清除一个而不是另一个,还有ClearHeadersClearContent方法。

答案 2 :(得分:1)

一种解决方案,kludgey,但可以在其他地方使用:

Response.Redirect("close.html")

close.html只有

  <script>
  window.close();
  </script>

答案 3 :(得分:0)

请改为尝试:

HttpContext.Current.ApplicationInstance.CompleteRequest();

Microsoft自己say表示Response.End仅用于向后兼容:

  

此方法仅适用于   与ASP的兼容性 - 即   与基于COM的兼容性   网络编程技术   在ASP.NET之前

不确定它会解决您的问题,但至少微软不会有借口.. :))