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

时间:2016-05-30 13:01:47

标签: javascript asp.net

我有一个asp.net应用程序有单页(x.aspx)。这是一些文本框,无线电等等和一个按钮。单击按钮,我需要先调用一个web api将数据保存到数据库中,然后关闭页面。请注意,此页面不会弹出。如果我在page_load上放置RegisterOnSubmitStatement,它会关闭页面,但点击按钮不会触发。我尝试了RegisterclientScriptBlock,RegisterStartupScript但它们都不起作用。

请建议如何解决此问题。感谢。

2 个答案:

答案 0 :(得分:0)

保存日期后

 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 :(得分:0)

方法1

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

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);" ... />

在此示例中,页面将在一秒钟(1000毫秒)后关闭。您可以调整延迟以满足您的需求。


方法3

此方法确保在数据保存方法完成之前窗口未关闭。

在触发保存过程的按钮单击上,启动间隔计时器以向服务器发送定期AJAX请求。当服务器的响应确认数据已保存时,请关闭窗口。

<asp:Button ID="btnSaveData" runat="server" OnClientClick="checkIsDataSaved()" ... />

function checkIsDataSaved() {
    var interval = setInterval(function () {
        $.get('', 'isDataSaved', function (data) {
            if (data == "done") {
                // The data has been saved, close the window
                clearInterval(interval);
                window.close();
            }
        });
    }, 1000);  // Every 1000 ms
}

在代码隐藏中,在保存数据后在Session变量中设置一个标志:

protected void SaveDataMethod()
{
    // Save to database
    ...

    Session["DataSaved"] = true;
    Response.End();
}

Page_Load中,收到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;
    }
    ...
}