ASP.NETで登録ボタン等を押した際、成功時は画面を閉じ失敗時は閉じずにエラーメッセージなどを出すということがしたい。
結論: ClientScript.RegisterClientScriptBlockを使用
Private Sub RegistrationClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RegistrationButton.Click
Dim result As Boolean = False
If(registration(Me.params))
ClientScript.RegisterClientScriptBlock(Me.GetType(), "key", "window.alert('成功ですさよなら');window.close()", True)
Else
Me.error.Visible = True
EndIf
End Sub
上記のRegisterClientScriptBlockを使用するとページを描画せずにアラート (閉じるとウィンドウもそのまま閉じる)。
RegisterStartupScriptに変えるとページを描画してからアラートが出る。
Response.Write("<script language='javascript'> { window.alert('成功ですさよなら');window.close();}</script>")
でも同じ動作自体は実現できるようです。
参照元: Re[3]: webページのボタンを押したら画面が閉じるようにしたい
上の方法の方がよろしそうな気はしますが。
以上。残りは経緯というか、手間取った言い訳というか。
ボタンに最初からOnclickイベントでWindow.Closeを仕込んでいると、Confirmでキャンセルしても画面が閉じてしまうしバリデーションエラーを表示してもユーザがそれを見ることもできないうちに画面が閉じる。
かといって、登録成功時にボタンのOnclickイベントにWindow.Closeを追加するようにしても動作するのは再びボタンを押下した際となって意味がなかった。
やりたいことから検索ワードを考えて探しても上の Onclick でウィンドウを閉じる方法に関する日本語ページしか見つからず、onload 使ってやればいけるのではと気づいてようやくヒントとなるページに到達。
定番の動作だと思うんですけど ASP.net の標準機能 (?) でできないようですし記事もぱっと見つからないというと、あんまりこういう動作をしたいシチュエーションってないものなんでしょうか?
ちなみに、検索語に stack overflow を加えて最初から決め打ちにするといい感じのページが出てくるらしい。
Windowとかcloseとかグーグラビリティの低い検索ワードが多くなってしまうネタだったので日本語ページがノイズになって自然には到達できませんでした。無念。