■48151 / inTopicNo.1) |
ConfirmButtonExtenderについて |
□投稿者/ def (3回)-(2010/03/25(Thu) 22:34:13)
|
分類:[ASP.NET (C#)]
環境 .Net Framework3.5 AjaxControlToolKit(3.0.3093.0)
お世話になります。
現在上記環境で開発を行っていますが、UpdatePanel の ContentTemplate に含まれた
ボタン + ConfirmButtonExtender + ModalPopupExtender にて不可思議な動作をしています。
初回のボタン押下では正しくポップアップされ、ポップアップパネル内のボタン押下でも
期待の動作を行います(OK押下ならOKボタンのサーバ処理、キャンセルならポストバックしない)
が、非同期ポストバック後に同様の操作を行うと、ポップアップ自体はされるのですが、
ポップアップパネル内のボタン押下(OK、キャンセルどちらでも)で、空のポストバック(?)が走り、
期待の動作になりません。
その後、再度ポップアップパネルを表示させ、パネル内のボタン押下を行えば動作はするのですが。
おそらくは非同期ポストバック時に実行される javascript では、通常のポストバック時に実行される
スクリプトと異なる点があるからだと思うのですが、よく分かりません。。。
UpdatePanel の外でまったく同じコードを書いた場合、期待通りの動作をします。
因みに、ModalPopupExtender と連動させない普通の ConfirmButtonExtender も試してみましたが
こちらはボタン押下前の非同期ポストバックの有無に関係なく動作しました。
何か解決法をご存じの方、ご教示願います。
以下、再現コードです。よろしくお願いいたします。
-------------------------------------------------------------------
<script runat="server" language="c#">
protected void btnAsyncRun_Click ( object sender, EventArgs e )
{
Label1.Text = DateTime.Now.ToString ();
}
protected void btnPopup_Click ( object sender, EventArgs e )
{
Label2.Text = DateTime.Now.ToString ();
}
protected void Button1_Click ( object sender, EventArgs e )
{
Label3.Text = DateTime.Now.ToString ();
}
protected void Button2_Click ( object sender, EventArgs e )
{
Label4.Text = DateTime.Now.ToString ();
}
</script>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<ajaxToolkit:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server"></ajaxToolkit:ToolkitScriptManager>
<%// ボタン + ConfirmButtonExtender + ModalPopupExtender %>
<asp:UpdatePanel ID="uppTEST" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:Button ID="btnAsyncRun" runat="server" Text="非同期ポストバック発生用" onclick="btnAsyncRun_Click" />
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
<asp:Button ID="btnPopup" runat="server" Text="ポップアップ" CssClass="buttonStyle" OnClick="btnPopup_Click" />
<asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>
<asp:Panel ID="pnlConfirm" runat="server" CssClass="ConfirmPanel" style="display: none;">
<asp:Label ID="lblCaption" runat="server" Text="OK押下でポストバック(非同期)" CssClass="ConfirmPanelLabel"></asp:Label>
<br />
<asp:Button ID="btnOK" runat="server" Text="OK" CssClass="ConfirmPanelOK" />
<asp:Button ID="btnCancel" runat="server" Text="キャンセル" CssClass="ConfirmPanelCancel" />
</asp:Panel>
<ajaxToolkit:ConfirmButtonExtender ID="btnPopup_ConfirmButtonExtender" runat="server"
Enabled="True"
DisplayModalPopupID="btnPopup_ModalPopupExtender"
OnClientCancel=""
TargetControlID="btnPopup">
</ajaxToolkit:ConfirmButtonExtender>
<ajaxToolkit:ModalPopupExtender ID="btnPopup_ModalPopupExtender" runat="server"
DynamicServicePath=""
Enabled="True"
PopupControlID="pnlConfirm"
OkControlID="btnOK"
CancelControlID="btnCancel"
BackgroundCssClass="ConfirmModalBackground"
TargetControlID="btnPopup">
</ajaxToolkit:ModalPopupExtender>
</ContentTemplate>
</asp:UpdatePanel>
<hr />
<%// ボタン + ConfirmButtonExtender %>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:Button ID="Button1" runat="server" Text="非同期ポストバック発生用" onclick="Button1_Click" />
<asp:Label ID="Label3" runat="server" Text="Label"></asp:Label>
<asp:Button ID="Button2" runat="server" Text="ポップアップ" onclick="Button2_Click" />
<asp:Label ID="Label4" runat="server" Text="Label"></asp:Label>
<ajaxToolkit:ConfirmButtonExtender ID="Button2_ConfirmButtonExtender" runat="server" ConfirmText="OK押下でポストバック(非同期)" Enabled="True" TargetControlID="Button2">
</ajaxToolkit:ConfirmButtonExtender>
</ContentTemplate>
</asp:UpdatePanel>
</form>
</body>
</html>
|
|