Javascript 在数据库中保存数据后,如何在单击按钮时关闭aspx页面

Javascript 在数据库中保存数据后,如何在单击按钮时关闭aspx页面,javascript,asp.net,Javascript,Asp.net,我有一个asp.net应用程序具有单页(x.aspx)。它是一些文本框,收音机接口等和一个按钮。单击按钮时,我需要首先通过调用一个web api将数据保存到数据库中,然后关闭页面。请注意,此页面不是弹出窗口。如果我将RegisterOnSubmitStatement放在页面上,它会关闭页面,但单击按钮不会触发。我试过RegisterclientScriptBlock和RegisterStartupScript,但都不起作用 请建议如何解决这个问题。谢谢。保存日期后 protected void

我有一个asp.net应用程序具有单页(x.aspx)。它是一些文本框,收音机接口等和一个按钮。单击按钮时,我需要首先通过调用一个web api将数据保存到数据库中,然后关闭页面。请注意,此页面不是弹出窗口。如果我将RegisterOnSubmitStatement放在页面上,它会关闭页面,但单击按钮不会触发。我试过RegisterclientScriptBlock和RegisterStartupScript,但都不起作用

请建议如何解决这个问题。谢谢。

保存日期后

 protected void Page_Load(object sender, EventArgs e)    
{
//Save data here and after that execut script
    Page.ClientScript.RegisterOnSubmitStatement(typeof(Page), "closePage", "window.onunload = CloseWindow();");
}
保存日期之后

 protected void Page_Load(object sender, EventArgs e)    
{
//Save data here and after that execut script
    Page.ClientScript.RegisterOnSubmitStatement(typeof(Page), "closePage", "window.onunload = CloseWindow();");
}

方法1

您可以使用按钮单击事件处理程序中的注册表启动脚本注册结束代码。在服务器上完成处理后,该代码将在客户端执行:

protected void btnSaveData_Click(object sender, EventArgs e)
{
    // Save data to database
    ...

    ClientScript.RegisterStartupScript(Page.GetType(), "ClosePage", "window.close();", true);
}

方法2

您可以尝试在延迟后关闭页面:

<asp:Button runat="server" OnClientClick="setTimeout(function () { window.close(); }, 1000);" ... />
在加载页面中,接收AJAX请求并发送结果:

protected void Page_Load(object sender, EventArgs e)
{
    if (Request.QueryString.ToString() == "isDataSaved")
    {
        bool isDataSaved = Session["DataSaved"] != null && (bool)Session["DataSaved"];
        Session["DataSaved"] = false;
        Response.ClearContent();
        Response.Write(isDataSaved ? "done" : "saving");
        Response.End();
        return;
    }
    ...
}

方法1

您可以使用按钮单击事件处理程序中的注册表启动脚本注册结束代码。在服务器上完成处理后,该代码将在客户端执行:

protected void btnSaveData_Click(object sender, EventArgs e)
{
    // Save data to database
    ...

    ClientScript.RegisterStartupScript(Page.GetType(), "ClosePage", "window.close();", true);
}

方法2

您可以尝试在延迟后关闭页面:

<asp:Button runat="server" OnClientClick="setTimeout(function () { window.close(); }, 1000);" ... />
在加载页面中,接收AJAX请求并发送结果:

protected void Page_Load(object sender, EventArgs e)
{
    if (Request.QueryString.ToString() == "isDataSaved")
    {
        bool isDataSaved = Session["DataSaved"] != null && (bool)Session["DataSaved"];
        Session["DataSaved"] = false;
        Response.ClearContent();
        Response.Write(isDataSaved ? "done" : "saving");
        Response.End();
        return;
    }
    ...
}

我之前尝试过,但问题是,只有在用户输入数据并提交后,我才能在回发中这样做。如果我把RegisterOnSubmit放在If(IsPostBack)中,它不会关闭,如果我把它放在If(IsPostBack)之外,它将在保存之前关闭。在简单的javascript函数中保存一个值,并在保存日期后更新代码中的值,如果条件为真,请在jaavascript函数中关闭窗口。您能进一步说明这一点吗?无论如何,谢谢你的帮助。我之前试过了,但问题是只有在用户输入数据并提交后,我才能在回发中这样做。如果我把RegisterOnSubmit放在If(IsPostBack)中,它不会关闭,如果我把它放在If(IsPostBack)之外,它将在保存之前关闭。在简单的javascript函数中保存一个值,并在保存日期后更新代码中的值,如果条件为真,请在jaavascript函数中关闭窗口。您能进一步说明这一点吗?无论如何,谢谢你的帮助。我尝试了这个,但它无法关闭页面。看起来用javascript/jQuery做任何事情都是唯一的解决方案。你不认为这是一种危险的方法吗?因为在某些情况下,api调用需要更多的时间,在数据保存到db之前,它会关闭页面?我补充了另一个建议。我在服务器上用一个人工长的“保存”过程成功地测试了它。我尝试了这个过程,但它没有关闭页面。看起来用javascript/jQuery做任何事情都是唯一的解决方案。你不认为这是一种危险的方法吗?因为在某些情况下,api调用需要更多的时间,在数据保存到db之前,它会关闭页面?我补充了另一个建议。我在服务器上用一个人工长时间的“保存”过程成功地测试了它。