ASP.NET AJAX:更新面板中的按钮会导致在window.onbeforeunload之前激发OnClick事件

ASP.NET AJAX: button inside an updatepanel causes the OnClick event to fire before window.onbeforeunload

本文关键字:onbeforeunload window 事件 OnClick 更新 AJAX NET 按钮 ASP      更新时间:2023-09-26

aspx:

<script type="text/javascript">
    window.onbeforeunload = function (e) {
        if (unsavedData()) {
            return "Exit page?";
        }
    }
    function unsavedData() {
        //logic for unsaved data here
        //let's just return true for this example
        return true;
    }
</script>
<asp:UpdatePanel ID="updatePnlContent" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="false">
    <ContentTemplate>
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="btnSave" EventName="Click" />
            <%-- triggers for other buttons  --%>
        </Triggers>
        <ContentTemplate>
            <asp:Button ID="btnSave" runat="server" Text="Save" OnClick="btnSave_Click"/>
            <asp:Button ID="btnCancel" runat="server" Text="Cancel" OnClick="btnCancel_Click"/>
            <%-- Other fields and buttons  --%>
        </ContentTemplate>
    </ContentTemplate>
</asp:UpdatePanel>

背后的代码

protected void btnSave_Click(object sender, EventArgs e)
{
    //save data
}
protected void btnCancel_Click(object sender, EventArgs e)
{
    Response.Redirect("Default.aspx");
}

如果我单击"取消"按钮,并且有未保存的数据,我会得到一个提示,如预期的那样,单击"确定"继续,或点击"取消"停留在此页面上。然而,当我按Cancel停留在这个页面上时,我在一个Microsoft AJAX javascript中得到了一个未指定的错误。

我认为发生的事情是在window.onbeforeunload函数之前触发了OnCilck事件。如何确保只有当用户单击"确定"继续时才触发OnClick事件,而不是当单击"取消"留在该页面时才触发?

从Cancel按钮中删除OnClick方法,并将其替换为OnClieckClick,然后调用unsavedData()函数。

如果你想使用OnClick和OnClientClick,请参阅这篇文章了解解决方案:OnClientClick和On Click不同时工作?