- PR -

ASP.NET Web ページにクライアント スクリプトを動的に追加する方法で

1
投稿者投稿内容
大ベテラン
会議室デビュー日: 2003/09/16
投稿数: 193
お住まい・勤務地: 千葉県
投稿日時: 2008-08-12 22:57
お世話になっております

 RegisterOnSubmitStatementを使用して
 スクリプトを 埋め込んだのですが

 埋め込んだスクリプトで alert は正常に動作されるのですが
 return confirm は 動作しないのですが
 return confirm を Onclick 時のスクリプトに埋め込む場合は
 正常に動作します

 ASP.NET2.0 の場合、クライアントコールバックで対処ができますが
 ASP.NET1.0 の場合は POSTBACK する手前で 確認画面を表示する方法って
 ありませんでしょうか?

 すみません ご教授の程 よろしくお願いいたします
kiyokura
ベテラン
会議室デビュー日: 2007/08/08
投稿数: 69
お住まい・勤務地: 岡山
投稿日時: 2008-08-13 16:28
こんにちは。

引用:

七さんの書き込み (2008-08-12 22:57) より:
 埋め込んだスクリプトで alert は正常に動作されるのですが
 return confirm は 動作しないのですが



確認させていただきたいのですが、『動作しない』というのは、confirmのダイアログ自体が表示されずにそのままPostされてしまう、という理解でよいでしょうか。


また、alertだと動くという点についても疑問がありまして、これは同じコントロールの同じイベントで発生したPostBackに対してでしょうか。それとも違うコントロール or 違うイベントに対して、でしょうか。


手元にASP.NET 1.0の環境が無いため、1.1で確認した動作になりますが、以下のように登録した場合、PostBackを実行するコントロールがButtonコントロールの既定の動作であれば、alertでもconfirmでも動作しました。

コード:
RegisterOnSubmitStatement("confirm", "return confirm('ポストバックしますか?');")



逆に、ASP.NET 1.1では、例えばAutoPostBackプロパティーをtrueにしたDropDownListで等によってPostBackが実行された場合、alertであってもConfirmであっても、動作しないと思います。
(これはブラウザのonsubmitの着火に関する仕様(?)が原因です。ちなみに、ASP.NET 2.0ではこの場合も動作するよう、ちょっとした小細工(というと語弊がありますが……)が施されています。)
大ベテラン
会議室デビュー日: 2003/09/16
投稿数: 193
お住まい・勤務地: 千葉県
投稿日時: 2008-08-14 19:49
返信をありがとうございます
 お礼が遅れてしまって申し訳ありません

引用:


コード:
RegisterOnSubmitStatement("confirm", "return confirm('ポストバックしますか?');")






重ね重ね申し訳ないのですが
今、気がついてしまった 私の書き込みミスで・・・・
RegisterOnSubmitStatement ではなく RegisterStartupScript
の間違いです

RegisterOnSubmitStatement こちらでの動作は確認とれています

あまりにも 目的を書き込んでなかったため
ご迷惑をおかけしました

やりたい事は
OnClick イベントにて サーバーサイドの処理にて
データを特定した後に 確認画面(confirm) を表示し
戻り値により コントロールのプロパティを
切り替えたいのですが・・・・

RegisterOnSubmitStatement だと サーバーサイドの処理と
クライアントサイドの処理の 順番が 逆 になってしまうんです

すみません 妙な書き込みだと思われたと
思います   ごめんなさい


kiyokura
ベテラン
会議室デビュー日: 2007/08/08
投稿数: 69
お住まい・勤務地: 岡山
投稿日時: 2008-08-14 22:51
引用:

七さんの書き込み (2008-08-14 19:49) より:
返信をありがとうございます
 お礼が遅れてしまって申し訳ありません

RegisterOnSubmitStatement ではなく RegisterStartupScript
の間違いです




なるほど。やはり、何かつじつまが合わないな、と思いました(^^;



引用:

やりたい事は
OnClick イベントにて サーバーサイドの処理にて
データを特定した後に 確認画面(confirm) を表示し
戻り値により コントロールのプロパティを
切り替えたいのですが・・・・




えっと、では、再度確認なのですが、実現したいことのイメージとしてはこんな感じでしょうか?
(ちょっとうまく書けないのですが、CLがブラウザでの操作、SVがサーバサイド処理、という感じで)

−−−−−−−−−−−−−−−−−−−−−−−−
1) [CL] Button.Click
   ↓
 <POST>
   ↓
2) [SV] データ取得、confirm表示させるスクリプトを書き出す
   ↓
 <レスポンス>
   ↓
3) [CL] confirm表示
   ↓
 <POST>
   ↓
4) [SV] confirmの戻りで処理分岐(コントロールのプロパティ操作)
   ↓
 ・・・・・  
−−−−−−−−−−−−−−−−−−−−−−−−

大ベテラン
会議室デビュー日: 2003/09/16
投稿数: 193
お住まい・勤務地: 千葉県
投稿日時: 2008-08-15 18:16
引用:

kiyokuraさんの書き込み (2008-08-14 22:51) より:

えっと、では、再度確認なのですが、実現したいことのイメージとしてはこんな感じでしょうか?
(ちょっとうまく書けないのですが、CLがブラウザでの操作、SVがサーバサイド処理、という感じで)




まさしく その通りです
すみません よろしくお願いします
kiyokura
ベテラン
会議室デビュー日: 2007/08/08
投稿数: 69
お住まい・勤務地: 岡山
投稿日時: 2008-08-17 19:36
であれば、とりあえず『confim後にPostBackするようなスクリプト』を書き出すだけで良いと思います(スクリプトの書き出しはRegisterStartupScriptでやって良いと思います)。

また、JavascriptからのPostBackのさせ方ですが、後にサーバサイドでどのイベントでPostBackされたかが楽に解るほうが良いのであれば、以下のような方法があります。

1) 画面に、Buttonコントロールを一つ配置。(ここでは、名前をButton1とします)
2) CSSにて、Button1の表示を消します。
3) RegisterStartupScriptで表示するスクリプトを以下のようにする。
コード:
if (confirm('hogehoge')){ document.getElementById('" + Button1.ClientID + "').click(); }


4) あとは、Button1のonClickイベントハンドラ内で適切に処理。


以上でどうでしょうか。
1

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