从代码隐藏中关闭ASPX页面的最佳方法是什么?
我有一个按钮事件处理程序,我想在用户单击页面上的ASP.NET按钮后关闭页面.我试图以编程方式添加一个JavaScript方法,其中包含一个window.close()
命令到OnClientClick
事件关闭页面,但它不起作用.该按钮也asp:AsyncPostBoskTrigger
适用于AJAX更新面板.
该应用程序使用.NET Framework 3.5.
Cod*_*ike 48
你通常会这样做:
protected void btnClose_Click(object sender, EventArgs e)
{
ClientScript.RegisterStartupScript(typeof(Page), "closePage", "window.close();", true);
}
Run Code Online (Sandbox Code Playgroud)
但是,请记住,不同的场景会发生不同的事情.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);
}
Run Code Online (Sandbox Code Playgroud)
并创建一个close.html:
<html><head>
<title></title>
<script language="javascript" type="text/javascript">
var redirectTimerId = 0;
function closeWindow()
{
window.opener = top;
redirectTimerId = window.setTimeout('redirect()', 2000);
window.close();
}
function stopRedirect()
{
window.clearTimeout(redirectTimerId);
}
function redirect()
{
window.location = 'default.aspx';
}
</script>
</head>
<body onload="closeWindow()" onunload="stopRedirect()" style="">
<center><h1>Please Wait...</h1></center>
</body></html>
Run Code Online (Sandbox Code Playgroud)
请注意,如果由于某种原因窗口在2秒后没有关闭,close.html将重定向到default.aspx.
SP0*_*007 10
protected void btnOK_Click(object sender, EventArgs e)
{
// Your code goes here.
if(isSuccess)
{
string close = @"<script type='text/javascript'>
window.returnValue = true;
window.close();
</script>";
base.Response.Write(close);
}
}
Run Code Online (Sandbox Code Playgroud)
更新:我已经完成了所有的输入并提出了以下解决方案:
代码背后:
protected void Page_Load(object sender, EventArgs e)
{
Page.ClientScript.RegisterOnSubmitStatement(typeof(Page), "closePage", "window.onunload = CloseWindow();");
}
Run Code Online (Sandbox Code Playgroud)
在aspx页面中:
function CloseWindow() {
window.close();
}
Run Code Online (Sandbox Code Playgroud)
回发是重新加载页面的过程,因此如果您希望页面在回发后关闭,那么您需要设置window.close()javascript以在回发期间使用浏览器的onload事件运行,通常使用ClientScript.RegisterStartupScript()
功能.
但你确定这是你想做的吗?关闭页面往往会惹恼用户.
您应该注入一个启动脚本,该脚本将在回发完成后关闭页面.
ClientScript.RegisterStartupScript(typeof(Page), "closePage", "<script type='text/JavaScript'>window.close();</script>");
Run Code Online (Sandbox Code Playgroud)
小智 5
你只需要在你的 asp:Button 元素中添加这个属性(例如):
OnClientClick="javascript:window.close();"
Run Code Online (Sandbox Code Playgroud)
它完美地工作。
归档时间: |
|
查看次数: |
241660 次 |
最近记录: |