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");
}
[キャンセル] ボタンをクリックしたときに保存されていないデータがある場合、予想どおり、[OK] をクリックして続行するか、[キャンセル] をクリックしてこのページにとどまるように求めるプロンプトが表示されます。ただし、キャンセルを押してこのページにとどまると、Microsoft AJAX JavaScript の 1 つで特定できないエラーが発生します。
私が考えているのは、window.onbeforeunload 関数の前に OnCilck イベントが発生したことです。ユーザーが [OK] をクリックして続行し、[キャンセル] をクリックしてこのページに留まらない場合にのみ OnClick イベントが発生するようにするにはどうすればよいですか?