- PR -

[ASP.NET]クライアントからサーバーにイベントを送信する方法

投稿者投稿内容
みや
会議室デビュー日: 2005/08/01
投稿数: 4
投稿日時: 2005-08-01 18:16
いつも参考にさせていただいております。
[ASP.NET]初心者で初投稿させていただきます。

クライアントからサーバーにボタンクリックイベントを発生させたいのですが、
以下の方法で実現できません。
ご回答をよろしくお願いいたします。
◇実現したいこと
 選択ダイアログ(confirm)を表示させ、OKがおされた場合、
 サーバーに特定のイベント(今回はボタンクリック)を発生させたい。
 単にサーバーにSubmitするだけならできるのですが....
◇現在の方法
 以下のスクリプトをStartupScriptに埋め込んでいます。
ret = self.confirm('OKでボタンクリック発生');
if (ret == true)
document.getElementById('button1').click();
 結果、実行させてもポストバックも起きなければエラーも発生しません。

クラインアントでクリックさせればポストバックするというのが、
私の大きな勘違いなのでしょうか?


かえで
常連さん
会議室デビュー日: 2004/09/16
投稿数: 38
投稿日時: 2005-08-01 18:39
WebControl.Attributes プロパティを使ってみればどうでしょうか?

すいません。
ちょっと業務合間に書いてるので説明不足なのは、ご勘弁をm(_ _)m

[ メッセージ編集済み 編集者: かえで 編集日時 2005-08-01 18:40 ]
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2005-08-01 18:49
NAL-6295です。

対象のボタンのクライアント側で発生するonClickイベントでconfirmがOKじゃなかった時にreturn falseを返すようなクライアントサイドスクリプトを追加してあげればよいですよ。

追加する方法はかえでさんの言っている助言を辿れば解ると思います。
みや
会議室デビュー日: 2005/08/01
投稿数: 4
投稿日時: 2005-08-01 19:13
かえでさん、NAL-6295さん早速の回答ありがとうございます。

ご回答の内容は、ボタンOnClickイベント時にクライアントで
選択ダイアログ(Confirm)を表示し、OKクリック時のみイベントを
ポストバックさせたい場合の方法ですよね?

実はOKクリックで発生させたいイベントは当該処理を実行している
ポストバックイベントとは別のイベントを発生させたいのです。
OKクリック時に何らかのViewStateに値を書きこんでSubmitし、
Page_Loadイベントで結果を確認するというようなことならできるのですが、
せっかくならイベント発生でスッキリとプログラミングしたいと
考えた次第です。
わがままで申し訳ありません。

実はネットで掲示版というものを使うのも初めてなので、
回答いただいて本当に感謝しております。
せっかくの回答に私の勘違いでしたら本当に申し訳ありません。



一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2005-08-01 19:42
引用:

みやさんの書き込み (2005-08-01 19:13) より:
OKクリック時に何らかのViewStateに値を書きこんでSubmitし、
Page_Loadイベントで結果を確認するというようなことならできるのですが、



"OKクリック"というのはconfirmのOKですよね。
"ViewStateに値を書きこ(む)"なんてことできます?

で、やりたい事というのはconfirmでOKの時に、button1がクリックされたことにしたいということでよろしいですか?
button1をクリックしたらどうなります?思った通りの動作をしますか?
みやさんが初めに提示されたスクリプトで動きそうな気がしますけどね・・・私も勘違いしてるのかな。
みや
会議室デビュー日: 2005/08/01
投稿数: 4
投稿日時: 2005-08-01 20:10
引用:---------------------------------------------------------------------------

 一郎さんの書き込み (2005-08-01 19:42) より:
 "OKクリック"というのはconfirmのOKですよね。
 "ViewStateに値を書きこ(む)"なんてことできます?

--------------------------------------------------------------------------------
一郎さん回答ありがとうございます。

"OKクリック"とはconfirmのOkのことです。
"ViewStateに値を書きこ(む)"というのは、確認せずに適当な事書いてしまいました。
すみません。submitできるのでそんなんことで結果が確認できるかと..........

引用:---------------------------------------------------------------------------

 一郎さんの書き込み (2005-08-01 19:42) より:
 button1をクリックしたらどうなります?思った通りの動作をしますか?
 みやさんが初めに提示されたスクリプトで動きそうな気がしますけどね・・・

--------------------------------------------------------------------------------
button1クリックは通常の操作ではポストバックが発生し機能しています。
なにか他の要因でイベントが発生しないのでしょうか?
もっとよくテストしてみます。
本当にありがとうごいました。
でっち6号
大ベテラン
会議室デビュー日: 2005/01/31
投稿数: 176
お住まい・勤務地: Kawasaki
投稿日時: 2005-08-01 21:56
コントロールに付随しているイベントを、別のイベントでキックするのは
あまり美しくありませんし、後からソースコードを追うときに苦労しますよ。
ボタンのクリックイベントで行っている処理を別関数に切り出して、
クリックイベントと、confirmでOKを押した後の処理とで共に呼出す形に
した方が良いと思います。
(いや、単なる私の好みなのでどうでも良いのですが...)

で、肝心のポストバックの仕方ですが、
document.getElementById('button1').click();
の行を
document.forms[0].submit();
に書き換えるだけでOKなはずです。

あとは、ロードイベントでOK押下のイベントを拾えるようにHIDDENなり
クッキーなりに情報を書いておけば良いのですが、私はクリアの手間が
要らないHTMLコントロールのHIDDENの方が好みなのでそっちでサンプル
を書きます。

※事前準備(ASPX側に以下のHIDDENを追加)
<Input type="HIDDEN" Name="hoge">

コード:
◆startupScript追加場所
string startupScript = "<script language='JavaScript'>"
	+ "ret = self.confirm('OKでボタンクリック発生');"
	+ "if (ret == true) {"
	+ "document.getElementById('hoge').value='hogehoge';"
	+ "document.forms[0].submit();"
	+ "} <" + "/script>";
RegisterStartupScript("startup", startupScript);

◆Onloadでconfrimのイベントを拾う
if (Request.Form["hoge"] != null)
{
	/*button1のクリックイベントと同じ関数を呼出す*/
}



とりあえず私の環境では動作しました。
みや
会議室デビュー日: 2005/08/01
投稿数: 4
投稿日時: 2005-08-02 10:02
引用:

でっち6号さんの書き込み (2005-08-01 21:56) より:
で、肝心のポストバックの仕方ですが、
document.getElementById('button1').click();
の行を
document.forms[0].submit();
に書き換えるだけでOKなはずです。

あとは、ロードイベントでOK押下のイベントを拾えるようにHIDDENなり
クッキーなりに情報を書いておけば良いのですが、私はクリアの手間が
要らないHTMLコントロールのHIDDENの方が好みなのでそっちでサンプル
を書きます。




ご回答ありがとうございます。
やはりそれ(submit)しかないようですね。
このやり方でやってみます。
ソースコードまで付けていただいて本当に感謝します。
今後ともよろしくお願いいたします。

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