关闭ASP.NET和AJAX应用程序的浏览器窗口

时间:2008-12-09 23:49:02

标签: asp.net javascript asp.net-ajax

在服务器端执行后关闭AJAX ASP.NET应用程序的浏览器窗口的最佳方法是什么。

我发现了这个solution,但对于我想要完成的事情来说似乎有点复杂。或者这是完成任务的最佳方式。

更新:按下按钮后我必须关闭窗口

更新1:我尝试了其他SO问题的解决方案,但它对我不起作用。

<asp:Button ID="btnMyButton" runat="server" onClick="btnMyButton_Click" />

protected void btnMyButton_Click(object sender, EventArgs e)
{
}

我在页面中使用了以下代码,但是“正在查看的网页正在尝试关闭窗口”模块窗口会弹出。

if (ScriptManager.GetCurrent(this).IsInAsyncPostBack)
            ScriptManager.RegisterStartupScript(upApproveRequest, typeof(string), "closeWindow", "window.close();", true);

有什么方法可以阻止这种情况吗?

4 个答案:

答案 0 :(得分:1)

不,未经用户同意,无法关闭浏览器窗口。您可以将它们从应用程序中注销,但不能强行关闭浏览器窗口。

答案 1 :(得分:1)

实际上,您可以通过在按钮点击事件中放置以下代码来实现此目的。

protected void btnMyButton_Click(object sender, ImageClickEventArgs e)
{
    // Update database
    bool success = Presenter.DoDatabaseStuff();

    if (success)
    {
        // Close window after success
        const string javaScript = "<script language=javascript>window.top.close();</script>";
        if (!ClientScript.IsStartupScriptRegistered("CloseMyWindow"))
        {
            ClientScript.RegisterStartupScript(GetType(),"CloseMyWindow", javaScript);
        }
    }
    else
    {
        // Display failure result
        result_msg_area.Visible = true;
        lblError.Text = "An error occurred!";                
    }
}

答案 2 :(得分:0)

要避免脚本警告,您可以使用:

window.open('', '_self', '');window.close();

所以:

if (ScriptManager.GetCurrent(this).IsInAsyncPostBack)
        ScriptManager.RegisterStartupScript(upApproveRequest, typeof(string), "closeWindow", "window.open('', '_self', '');window.close();", true);

答案 3 :(得分:-2)

这就是它。您可以使用ScriptManager.RegisterStartupScript(...)