- PR -

ServerChangeイベントを2度おこさないようにするには

1
投稿者投稿内容
けい
常連さん
会議室デビュー日: 2004/12/03
投稿数: 47
お住まい・勤務地: 神奈川県
投稿日時: 2007-12-26 12:56
ASP.net2005でWeb開発をしています。
親、子画面があり、子画面で選択した情報によって親画面にデータを表示させる処理をしています。
子画面が親画面のHiddenコントロールに「伝票番号」を入れ、親画面はHiddenコントロールのServerChangeイベントで値を表示させています。

「伝票番号」が同じでも違う情報の場合があるため子画面で親画面に値をいれた場合は常にServerChangeイベントを起こしたいので親ServerChangeイベントでHiddenコントロールの値を使用した後に値を初期化(Value="")したいと思いました。が、この初期化処理を入れると同じイベントに2度入ってしまうのです。当然といえば当然ですが、これを避ける方法はないでしょうか?

EnableViewStateプロパティをTrue/Falseしたりしてみましたがうまくいきません。
どなたかご存知の方ご教授願います。
まるく
大ベテラン
会議室デビュー日: 2004/01/09
投稿数: 181
投稿日時: 2007-12-26 13:11
引用:

処理を入れると同じイベントに2度入ってしまうのです。当然といえば当然ですが、これを避ける方法はないでしょうか?


当然でしょうか? そういう実装になっているから(無駄な再ポストバックが発生している等)そうなっているのでは。
似たような処理は過去に何例も実装して来ましたが、そういった問題で悩んだ記憶はなかったです。
けい
常連さん
会議室デビュー日: 2004/12/03
投稿数: 47
お住まい・勤務地: 神奈川県
投稿日時: 2007-12-26 13:32
>まるくさん
ありがとうございます。
Value=""の処理をしなければServerChangeイベントは一度しか起きず、思ったとおりの動きです。
ServerChange
サーバーへのポスト間で変更された場合
とはソースコードで値を""xにした場合も含まれるということですよね?
この値を変えているのは子画面のJavascriptで
" window.opener.document.forms[0].hdnCode.value='XXX'"
という部分と
親画面の
hdnCode.Value = ""
だけです。以前似たような処理をされたときに初期化はどこで行っていたか覚えていらっしゃいますか?
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-12-26 19:44
親画面の、JavaScript で消していますか?かつ、その hidden が、AutoPostback だったりしますか?
まるく
大ベテラン
会議室デビュー日: 2004/01/09
投稿数: 181
投稿日時: 2007-12-27 09:48
引用:

けいさんの書き込み (2007-12-26 13:32) より:
以前似たような処理をされたときに初期化はどこで行っていたか覚えていらっしゃいますか?


けいさんと同じ作りです。最小コードで確認しました。

Jitta さんのご質問点を確認されて異常がないようでしたら、新規プロジェクトを作成し、再現する最小コードを作って提示してみてください。
けい
常連さん
会議室デビュー日: 2004/12/03
投稿数: 47
お住まい・勤務地: 神奈川県
投稿日時: 2007-12-28 13:51
Jittaさん、まるくさんありがとうございます。
>Jittaさん
親画面のサーバ側処理でValue=""としています。AutoPostBackというプロパティはありませんでした。
この処理と無関係にクライアントからサーバ側の処理<ボタンクリックイベント>を読んでいたのですが、これを削除したら2度起こることはなくなりました。
でもなぜだったのか原因がいまいちわかりません。

こんな答えですみませんが、とりあえず解決です。
いつもすばやいお返事ありがとうございます。
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2007-12-28 15:58
> クライアントからサーバ側の処理<ボタンクリックイベント>を読んでいたのですが、

どのようにしてこれを実現していたのかわかりませんが、この処理が まるく さんが書いている「無駄な再ポストバックが発生している」処理になってたんじゃないですか?

1

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