前提・実現したいこと
お世話になります。自分でも調べてみたのですが、どうにも上手くいかなかったので、質問させてください。
ASP.NETでWEBアプリを開発しています。
親画面と、コメントを入力させるための子画面の、2つの画面があります。
親画面で「コメント入力」ボタンをクリックしたとき、javascriptで子画面をモーダル表示させています。
子画面には、コメント入力用のテキストボックスと、「登録」「キャンセル」の2つのボタンがあり、「登録」ボタンが押された場合は親画面にテキストボックスの値を渡して画面を閉じます。
親画面では、子画面で入力したコメントを受け取り、DBへ登録処理を行います。このDB登録処理は、親画面の「コメント入力」ボタンクリックイベントで処理しています。
「キャンセル」ボタンが押された場合は登録処理を行わず(=親画面の「コメント入力」ボタンクリックイベントを発生させず)、ただ子画面を閉じるのみの動きをさせたいです。
発生している問題・エラーメッセージ
キャンセルボタンを押したときも、「コメント入力」ボタンクリックイベントが発生し、DBへの登録処理が行われてしまいます。
なお、挙動としては、「キャンセル」ボタンクリック → 一度画面が閉じる? → 同じ画面が開きなおす、という変な動きも発生しています。
ちなみにこの開き直す挙動は、「登録」ボタンをクリックした場合にも発生しています。
なので、今のところ「キャンセル」と「登録」の違いが、DBにテキストボックスの値が登録されるか、されないか、というところのみになっています。
この動き自体もおかしいので、調べているのですが、似たような状況の資料が見付けられず、対策が分かりません……。
「キャンセル」ボタンクリック時、Visual Studioでデバッグした際の動きを見る限り、javascriptのIF分岐は、意図したとおりに「return false;」を通過しています。
「return false;」を入れることでクライアントでエラーを発生させ、サーバーに処理を投げなくなり、ボタンクリックイベントを停止させることが出来る、という理解をしているのですが、そうではないのでしょうか?
該当のソースコード
親画面
javascript
1function ClickCommentButton() { 2 var demno = document.getElementById("lbl_DemNo").innerText; 3 var url = 'Comment.aspx?btn=input&demno=' + demno; 4 var rtn = window.showModalDialog(url, "_blank", "dialogHeight:250px; dialogWidth:600px;"); 5 if (rtn === void 0) { 6 return false; 7 } else { 8 document.getElementById("hid_Comment").value = rtn; 9 return true; 10 } 11}
HTML
1<form id="form1" runat="server"> 2 <div id="main"> 3 <h1>申請内容</h1> 4 <div class="DemInfo"> 5 状況:<asp:Label ID="lbl_Status" runat="server" Text="作成中"></asp:Label> 6 <asp:HiddenField ID="hid_StatusCD" runat="server" Value="0" /> 7 8 <label class="wid80">申請管理No.</label> 9 <asp:Label ID="lbl_DemNo" runat="server" Text="未設定" class="clearLeft"></asp:Label> 10 <asp:HiddenField ID="hid_Comment" runat="server" /> 11 </div> 12 <div class="DemButton"> 13 <asp:Button ID="btn_Cancel" runat="server" Text="キャンセル" class="btn_Middle" 14 onclientclick="window.close()" /> 15 <asp:Button ID="btn_comment" runat="server" Text="コメント入力" 16 class="btn_Learge" onclientclick="ClickCommentButton()" /> 17 <asp:Button ID="btn_OK" runat="server" Text="更新" class="btn_Middle" /> 18 </div> 19 </div> 20</form>
asp.net
1Protected Sub btn_Comment_Click(sender As Object, e As EventArgs) Handles btn_comment.Click 2 Dim Comment As New String = "" 3 Dim M01 As New M01_GetData 4 5 'コメントを取得 6 Comment = hid_Comment.Value 7 8 'コメントDB登録(コメントと更新日時をDB登録している) 9 If M01.UpdateComment(Comment) = True Then 10 '正常終了の場合画面を再表示 11 SetDemInfo(Session("UserID"), DI.DemNo) 12 End If 13 End Sub
子画面
javascript
1function ReturnComment() { 2 //テキストボックスに入力されたコメントを返す 3 window.returnValue = document.getElementById("txtb_Comment").value; 4 window.close(); 5} 6 7function CancelButtonClick() { 8 window.close(); 9}
html
1<form id="form1" runat="server"> 2 <h1>NGコメント</h1> 3 <div> 4 <asp:Label ID="lbl_Msg" runat="server" Text="コメントを入力してください。"></asp:Label> 5 </div> 6 <div class="btm-margin"> 7 <asp:TextBox ID="txtb_Comment" runat="server" 8 Rows="4" TextMode="MultiLine" Width="400px"></asp:TextBox> 9 </div> 10 <div class="btm-margin"> 11 <asp:Button ID="btn_Cancel" runat="server" Text="キャンセル" 12 CssClass="btn_Middle" OnClientClick="CancelButtonClick();" /> 13 <asp:Button ID="btn_RetComment" runat="server" Text="登録" 14 CausesValidation="True" CssClass="btn_Learge" 15 OnClientClick="ReturnComment();" /> 16 </div> 17</form>
試したこと
このサイトを参考にしています。
http://office-yone.com/blog/postback/
補足情報(FW/ツールのバージョンなど)
asp.net 4.0 / Visual Studio 2010 / Internte Exploler 8, 11
※社内システムにつき、古い環境で稼動させる必要があり苦労しております・・・・・・
不明点があればご指摘ください。よろしくお願いいたします。
回答3件
あなたの回答
tips
プレビュー