从代码隐藏中关闭ASPX页面的最佳方法是什么?
我有一个按钮事件处理程序,我想在用户单击页面上的ASP.NET按钮后关闭页面.我试图以编程方式添加一个JavaScript方法,其中包含一个window.close()
命令到OnClientClick
事件关闭页面,但它不起作用.该按钮也asp:AsyncPostBoskTrigger
适用于AJAX更新面板.
该应用程序使用.NET Framework 3.5.
你通常会这样做:
protected void btnClose_Click(object sender, EventArgs e)
{
ClientScript.RegisterStartupScript(typeof(Page), "closePage", "window.close();", true);
}
但是,请记住,不同的场景会发生不同的事情.Firefox不会让你关闭一个你没有打开的窗口(打开window.open()
).
IE7将提示用户"此页面正在尝试关闭(是|否)"对话框.
无论如何,你应该准备好处理窗口而不是总是关闭!
上述2个问题的一个解决方法是使用:
protected void btnClose_Click(object sender, EventArgs e) {
ClientScript.RegisterStartupScript(typeof(Page), "closePage", "window.open('close.html', '_self', null);", true);
}
并创建一个close.html:
Please Wait...
请注意,如果由于某种原因窗口在2秒后没有关闭,close.html将重定向到default.aspx.
protected void btnOK_Click(object sender, EventArgs e) { // Your code goes here. if(isSuccess) { string close = @""; base.Response.Write(close); } }
更新:我已经完成了所有的输入并提出了以下解决方案:
代码背后:
protected void Page_Load(object sender, EventArgs e) { Page.ClientScript.RegisterOnSubmitStatement(typeof(Page), "closePage", "window.onunload = CloseWindow();"); }
在aspx页面中:
function CloseWindow() { window.close(); }
回发是重新加载页面的过程,因此如果您希望页面在回发后关闭,那么您需要设置window.close()javascript以在回发期间使用浏览器的onload事件运行,通常使用ClientScript.RegisterStartupScript()
功能.
但你确定这是你想做的吗?关闭页面往往会惹恼用户.
您应该注入一个启动脚本,该脚本将在回发完成后关闭页面.
ClientScript.RegisterStartupScript(typeof(Page), "closePage", "");