- PR -

GridView の ItemField内のボタンに Postback後JavaScriptにてWindow.open したいのですが・・・

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

 GridViewのItemField内のボタンで
 Window.Openにて コード参照画面を表示させてます
 
 ここまでは、RowDataBoundにてAttributes["onclick"]にて動作実現します

 スクリプト実行する前に、サーバーサイドでの処理が必要なのですが
 一旦、onclick="Btn_Click" とし サーバーサイドにてBtn_Clickのイベントを
 起こしました
 RowCommand にて サーバーサイドの処理を行い
   (選択行の情報を セッションに編集する等の処理)
 Attributes["onclick"]にて Window.Open を 追加してみましたが
 当然、Window.Open 出来るのが 次のクリック時になります
 (1タイミングずれます)

 PostBack後に JavaScript を起動するには
 (ほかの画面で、「window.open」以外のJavaScriptも起動させたい)
 RegisterStartupScriptも使ってみたのですが
 Onclick に Javascript を充てるタイミングを
 どこでやるのかが、よく解らないです
 
 すみません ご教授の程 よろしくお願いいたします

くまっち
大ベテラン
会議室デビュー日: 2008/01/18
投稿数: 169
お住まい・勤務地: 茨城県のどこか。
投稿日時: 2008-02-26 10:54
実現したい処理の流れとしては、↓のようであってますかね。
ボタン押下→Sessionにデータ格納→画面Open→開いたページにてSession参照

そのまま質問に答えるとすれば
RowCommandの最後にClientScript.RegisterStartupScriptにて
ボタン押下時のスクリプトを吐き出せば良いはずです。
(が、この場合ブラウザの更新がなされたときなどの対処が必要になるかと思います)


ただ、、、上記では「実現したい事」と「実現できる事」に差異があります。
(その為、余計な対策・処理が必要になってきてしまいます)

ですので、、、

>スクリプト実行する前に、サーバーサイドでの処理が必要
このような場合、RowCommandを使用せずに ICallbackEventHandler を実装し
サーバーコールバック機能を使用する方法が最適かと思います。

ボタン押下→ServerCallback→Sessionにデータ格納→
 Callback結果受信→画面Open→開いたページにてSession参照

コールバック機能の実装方法などはWeb上にかなりの数のサンプルが有ると思います。
もし判らないようであれば、再度質問していただければと思います。

[修正]
インターフェース名を正しい名前に修正
ICallback→ICallbackEventHandler

[ メッセージ編集済み 編集者: くまっち 編集日時 2008-02-26 11:20 ]
大ベテラン
会議室デビュー日: 2003/09/16
投稿数: 193
お住まい・勤務地: 千葉県
投稿日時: 2008-02-26 11:05
引用:

くまっちさんの書き込み (2008-02-26 10:54) より:
コールバック機能の実装方法などはWeb上にかなりの数のサンプルが有ると思います。
もし判らないようであれば、再度質問していただければと思います。



コールバック機能・・・・うーークライントコールバックまでは
調べて 「逆だわ」と思ってたとこでした
クライアントがあればサーバーもあったんですねぇ

ありがとうございます
調べてみます
また よろしくお願いいたします

くまっち
大ベテラン
会議室デビュー日: 2008/01/18
投稿数: 169
お住まい・勤務地: 茨城県のどこか。
投稿日時: 2008-02-26 11:35
総称として、クライアント・コールバックが正しいですね。
その中のサーバーコールバックメソッドにてSessionへデータ保存です。

>「逆だわ」と思ってたとこでした
コールバック機能は双方向にやり取り可能です。
Client(Script) → Server(Code) → Client(Script)
という流れで、コードが実行され値の受け渡し等行えます。

内部的にはXmlHttpRequestによるバックグラウンド通信ですね。
大ベテラン
会議室デビュー日: 2003/09/16
投稿数: 193
お住まい・勤務地: 千葉県
投稿日時: 2008-02-26 12:17
引用:

くまっちさんの書き込み (2008-02-26 11:35) より:
総称として、クライアント・コールバックが正しいですね。
その中のサーバーコールバックメソッドにてSessionへデータ保存です。

>「逆だわ」と思ってたとこでした
コールバック機能は双方向にやり取り可能です。
Client(Script) → Server(Code) → Client(Script)
という流れで、コードが実行され値の受け渡し等行えます。

内部的にはXmlHttpRequestによるバックグラウンド通信ですね。



う・う・うー
すみません
www.microsoft.com/japan/msdn/asp.net/tips/ClientCallback3/
を読んでますが
頭がぐにゅぐにゅになります 
サーバーコールバックだと サーバーがクライアントになる なんて
マイクロソフトの注意も読んだ上で 迷子になります

なんか おすすめの本なり ページ等 ありますか?
応用力の無さに(涙)
くまっち
大ベテラン
会議室デビュー日: 2008/01/18
投稿数: 169
お住まい・勤務地: 茨城県のどこか。
投稿日時: 2008-02-26 12:35
MSDNのサンプルですが、、、
http://msdn2.microsoft.com/ja-jp/library/ms178208(VS.80).aspx
こちらのほうが、余計なコードが無く判りやすいかと思います。
大ベテラン
会議室デビュー日: 2003/09/16
投稿数: 193
お住まい・勤務地: 千葉県
投稿日時: 2008-02-26 13:58
引用:

くまっちさんの書き込み (2008-02-26 12:35) より:
MSDNのサンプルですが、、、
http://msdn2.microsoft.com/ja-jp/library/ms178208(VS.80).aspx
こちらのほうが、余計なコードが無く判りやすいかと思います。



blogs.sqlpassj.org/mitsugi/archive/2006/01/17/15833.aspx

このページで動きの確認が取れました
やっと、流れがつかめました
ありがとう ございました

大ベテラン
会議室デビュー日: 2003/09/16
投稿数: 193
お住まい・勤務地: 千葉県
投稿日時: 2008-02-26 16:17
度々すみません

前記のHPより作成したものは動作するのですが
PGに組み込むと
「インターフェイス メンバ
'System.Web.UI.ICallbackEventHandler.RaiseCallbackEvent(string)'
を実装しません。」
というビルドエラーが出ます

RaiseCallbackEvent と GetCallbackEvent の2つともです

2つに何が違うかというと
動作しない方は マスタページをしようしているため
ReceiveServerData と onclick 時の スクリプトを
JSファイルに置いています
(同一プロジェクト内に作成していますので 
 環境が異なるわけでは ないと思うのですが・・・)

マスターページの使用時は使えないのでしょうか?

すみません よろしくお願いいたします

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