- PR -

alertのOKボタンを押すまでの処理について

投稿者投稿内容
どん
会議室デビュー日: 2005/10/07
投稿数: 4
投稿日時: 2005-10-07 20:07
初投稿になります。よろしくお願い致します。

ASP.NETでの開発を行っております。
下記のようなコードにてフォーム上でボタンを押した時にJavascriptで
警告ダイアログを表示しているのですが、OKボタンを押すまでの間
メイン画面の方で読込み処理を行っているようなのですが、それを回避
する方法は、ないのでしょうか?何卒ご教授願います。

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim strScript As New System.Text.StringBuilder

strScript.Append("<script language=javascript>")
strScript.Append("alert('TEST')")
strScript.Append("</script>")
Page.RegisterStartupScript("alert", strScript.ToString)

End Sub


[ メッセージ編集済み 編集者: どん 編集日時 2005-10-07 20:08 ]

[ メッセージ編集済み 編集者: どん 編集日時 2005-10-07 20:10 ]
冬寂
ぬし
会議室デビュー日: 2002/09/17
投稿数: 449
投稿日時: 2005-10-07 20:48
.NETについては分からないのですが、「OKボタンの押下」というのはクライアント側の操作の訳で。
まず無理でしょう。

「なぜ、このような事をしたいのか?」を具体的に書いた方がよい回答もらえると思います。
どん
会議室デビュー日: 2005/10/07
投稿数: 4
投稿日時: 2005-10-07 21:07
迅速な返信ありがとうございます。

実際には、ログイン画面でのパスワードが間違っていた時の
エラー処理で使用しています。

Button1ボタンを押下した時にDBにアクセスし認証成功か失敗かのリターンコードを
返してもらい、失敗時にalertの処理を行おうとしています。

※ちなみにクライアント処理であるconfirmも同様に処理を行っていますが
読込み状態にはなりません。


[ メッセージ編集済み 編集者: どん 編集日時 2005-10-07 21:09 ]
でっち6号
大ベテラン
会議室デビュー日: 2005/01/31
投稿数: 176
お住まい・勤務地: Kawasaki
投稿日時: 2005-10-07 21:59
こんばんは、でっちです。

生成されたHTMLを見るとわかりますが、RegisterStartupScriptはHTMLの途中にScriptを埋め込むものです。
そのためalertを出すと、そこでhtmlの送出が中断しているとブラウザが判断し、読み込み中のように振舞います。

BODYタグのonloadでメッセージが表示されるように変更してみては如何でしょうか?

コード:

○ASPX側では、bodyタグにidとrunatを設定
<body id="Body" runat="server">

○RegisterStartupScriptをonloadへのスクリプト追加に変更
HtmlGenericControl BodyControl = (HtmlGenericControl)Page.FindControl("Body");
BodyControl.Attributes.Add("onload","alert('TEST')");



もうちょっとスマートなやり方がありそうな気もします。
ご存知の方がいらっしゃいましたら補足お願いします。

[追記]
これが「スマートではない」点は、一度onloadに追加すると以後PostBackの度にメッセージが出ることです。
Page_Loadあたりで毎回Removeしてあげないといけないのが、なんか嫌ですね。
[/追記]


[ メッセージ編集済み 編集者: でっち6号 編集日時 2005-10-07 22:20 ]
どん
会議室デビュー日: 2005/10/07
投稿数: 4
投稿日時: 2005-10-07 22:57
でっちさん、ありがとうございます。
なぜ読込み中のような動きなのか理解出来ました。

それとでっちさんのコードを参考に作成してみました。

Dim BodyControl As HtmlGenericControl
BodyControl = Page.FindControl("Body")
BodyControl.Attributes.Add("onload", "alert('TEST')")

これだとonloadのタイミングになり、回避できました。
ただでっちさんの追記にあるようにPostBackのたびにメッセージが出ます。
Removeについて調べてみましたが未だに解決できていません。
もう少し調べてみようかと思います。


それと以前の書き込みで
------------------------------------------------------------------------
※ちなみにクライアント処理であるconfirmも同様に処理を行っていますが
読込み状態にはなりません。
------------------------------------------------------------------------
とありましたが、これはPage_Loadでの処理でした。
そこでPage_Load内でalertを処理したところ、スマートな動きをしたので
どうにかボタン押下時の処理をPage_Loadで行いたいのですが無理でしょうか?
ボタン押下時には、Page_Load処理の後にボタンクリックの処理を行っている
ところまでは調査できたのですが、どのボタンを押したのかPage_Load内で
判断する方法が分かりません。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-10-08 06:54
引用:

どんさんの書き込み (2005-10-07 22:57) より:

これだとonloadのタイミングになり、回避できました。
ただでっちさんの追記にあるようにPostBackのたびにメッセージが出ます。
Removeについて調べてみましたが未だに解決できていません。
もう少し調べてみようかと思います。


毎回足して、不必要なときに削除するのではなく、必要なときに追加するようにすればいいのでは?

_____________________________________________________________________________
□ Posted by Jitta on 2005/10/08
じったのノート
□ Microsoft MVP :Visual Developer ASP/ASP.NET Oct.2005-Sept.2006
_________________
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2005-10-08 08:53
setTimeoutを使うとか。
でっち6号
大ベテラン
会議室デビュー日: 2005/01/31
投稿数: 176
お住まい・勤務地: Kawasaki
投稿日時: 2005-10-08 09:22
おはようございます、でっちです。

ぐわあ!、VB.NETでしたね、申し訳ないです。

Removeというのは、Attribute.Removeメソッドのことです。
今回の例であれば、BodyControl.Attributes.Remove("onload")
で削除できます。

引用:
そこでPage_Load内でalertを処理したところ、スマートな動きをしたので
どうにかボタン押下時の処理をPage_Loadで行いたいのですが無理でしょうか?



Page_Load内でボタンクリックを判定する方法ですが、PostBack時にはクリックされたボタンのnameをキー、valueを値としてPostされるので、Request.Formを使うやり方が一番お手軽だと思います。

ところで、『Page_Load内でalert』ってどう記述されてます?
流れからするとRegisterStartupScriptっぽいのですが、私のほうで実験した限りでは、Page_Load内であろうとRegisterStartupScriptを使った場合は読み込み中のように動作しました。

スキルアップ/キャリアアップ(JOB@IT)