[英]Programmatically close aspx page from code behind
从代码隐藏中关闭ASPX页面的最佳方法是什么?
我有一个按钮事件处理程序,我想在用户单击页面上的ASP.NET按钮后关闭页面。 我试图以编程方式将包含window.close()
命令的JavaScript方法添加到OnClientClick
事件以关闭页面但它不起作用。 该按钮也是AJAX更新面板的asp:AsyncPostBoskTrigger
。
该应用程序使用.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:
<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>
请注意,如果由于某种原因窗口在2秒后没有关闭,close.html将重定向到default.aspx。
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);
}
}
更新:我已经完成了所有的输入并提出了以下解决方案:
代码背后:
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", "<script type='text/JavaScript'>window.close();</script>");
您只需要在asp:Button元素中添加此属性(例如):
OnClientClick="javascript:window.close();"
它完美地运作。
如果您使用RadAjaxManager,那么这里的代码有助于:
RadAjaxManager1.ResponseScripts.Add("window.opener.location.href = '../CaseManagement/LCCase.aspx?" + caseId + "';
window.close();");
您可以通过简单地粘贴标记中按钮的OnClientClick事件中的窗口关闭代码来关闭窗口
对于任何想知道为什么他们无法获得提供的答案工作的人,因为页面必须已经通过javascript打开才能被javascript关闭。
由于大多数人发现这个asp问题可能使用asp:hyperlink
或某种asp重定向导航到需要关闭的页面。 这些重定向方法不使用javascript,因此不会通过javascript关闭。
我为我的应用程序找到了一个简单的解决方案,它正在消除NavigateUrl
并使用asp:Hyperlink.Attributes
向asp:Hyperlink.Attributes
添加onclick
,该超链接使用java脚本打开需要通过javascript关闭的窗口。
aspHyperlink.NavigateUrl = "https://www.google.com";
上面的NavigateUrl已删除,我们将附加点击事件。
aspHyperlink.Attributes.Add("onclick", "javascript:openInNewTab('https://www.google.com');");
在包含我们的aspHyperlink的页面后面的代码中,我们有用于打开Rinto提供的URL的javascript
function openInNewTab(url) {
var win = window.open(url, '_blank');
win.focus();
}
现在,使用openInNewTab
打开的所有页面都可以使用提供的答案关闭。
window.close();
关闭asp.net windows应用程序,
然后在其click事件中写下以下给定的代码
" this.close(); "
即:
private void button2_Click(object sender, EventArgs e)
{
this.Close();
}
protected void Button1_Click(object sender, EventArgs e)
{
Button1.Attributes.Add("onclick"," CloseWindow();");
}
<script type="text/javascript">
function CloseWindow()
{
window.close();
}
</script>
你可以简单地使用它......简单而容易。
Response.Write("<script>window.close();</script>");
希望这可以帮助。
如果你打开JavaScript弹出页面然后
Response.Write("<script>javascript:window.close();</script>");
会做的
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.