none
GetPostBackEventReferenceについて RRS feed

  • 質問

  • os:Windows Xp

    言語:vb.net 2003

    Form:web Form

    1つのボタンにクライアントサイドのOnClickとサーバーサイドのClickイベントを

    実行しております。

    クライアントサイドは、スタイルの変更処理。(計算中のメッセージ表示)

    サーバーサイドは、計算処理と次画面に移動する処理です。

    ひとます、GetPostBackEventReferenceを入れる事で

    両方とも実行する事は出来たのですが、

    他のボタン(aspのlinkbottun)にも反映されて、そのボタン処理が流れなくなってしましました。

    imgNext.Attributes.Add("onclick", "Next_Click();" + GetPostBackEventReference(imgNext))

    GetPostBackEventReferenceを流すことにより、

    クライアントサイドのOnloadも実行されています。

    そこで、linkbottunのClickイベントがキャンセルされている感じです。

    スタイルの変更処理・計算処理共にlinkbottunの制御はやっておりません。

    打開策が見つからない状態です。

    クライアントサイド・サーバーサイドそしてlinkbottunのClickイベントが、

    落ちずに実行出来るようにならないでしょうか?

    よろしくお願いします。

    2006年11月6日 7:04

すべての返信

  • やりたいことが、今ひとつ見えてないのですが...

    > GetPostBackEventReferenceを流すことにより、
    > クライアントサイドのOnloadも実行されています。

    GetPostBackEventReference を流すと、ポストバックされます。
    ポストバックされると、ブラウザの表示が再描画されます。
    このため、Onloadが実行されるのは既定の動作になります。

    2006年11月6日 10:12
  • GetPostBackEventReference(コントロール名)の場合は、

    指定したコントロールの時のみ実行されるのでは、ないのでしょうか?

    GetPostBackEventReference(コントロール名)が、

    全てのコントロールに有効になっている状態です。

    やりたいことは、ボタンのクリック時にjscript(クライアントサイド)・VB(サーバーサイド)の

    ロジックを流したい。

    GetPostBackEventReferenceを使うと思うのですが、

    GetPostBackEventReference(コントロール名)で、

    指定したコントロール以外(リンクボタン)をクリックした画面のポストバックが発行され

    Onloadが実行されるのを回避したい。

    ちなみに、GetPostBackEventReferenceを指定しないときには、

    リンクボタンで画面のポストバックは実行されませんでした。

    よろしくお願いします。

     

    2006年11月7日 0:18
  • 回答が遅くなりました。

    GetPostBackEventReference の引数のコントロールの指定は
    PostBackした時に押されたと認識するコントロールとなります。

    > コントロール1.Attributes.Add("onclick", "Next_Click();" + GetPostBackEventReference(コントロール2))

    のコードの場合コントロール1がクリックされた場合、
    ブラウザ上でNext_Click()メソッドが動作し、
    そのあと、ポストバックが行われます。
    ポストバックはボタンが押されたなどの場合に行われ、
    サーバ側で何が押されたのかを認識する必要がでてきます。
    どのコントロールが押されたかを指定しているのが
    コントロール2の部分となります。

    > 指定したコントロール以外(リンクボタン)をクリックした画面のポストバックが発行され
    > Onloadが実行されるのを回避したい。

    との事ですが、リンクボタン等のWebコントロールをクリックした時は
    GetPostBackEventReferenceの有無に関わらずポストバックが行われます。
    このため、ブラウザの再描画が行われる=onloadイベントが走る形となります。

    ということで、ポストバックを行いたくない場合には、Webコントロールを使わずに実装を行うか、
    リンクボタンに対して、まずはJavaScriptでポストバックが発生してもいいかどうか
    確認してあげた後にGetPostBackEventReference を設定してあげる形になります。

     

    2006年11月7日 16:40
  • 回答遅くなりました。

    原因が分かりました。

    リンクボタンは、Server.Executeでインクルードされた別画面上に配置されています。

    どうも、Server.Executeを使用しGetPostBackEventReferenceを使用していると、

    本来の動作がしないようです。

    試しに直にリンクボタンを配置した場合には、正しい動作をしました。

    何故か分からないですけど、GetPostBackEventReferenceを使用して、

    インクルード画面のイベントが実行する場合には、

    ポストバック時にServer.Executeでインクルードされた別画面が読み込まれなみたいです。

    インクルードせずに、直配置に修正したいと思います。

    2006年11月9日 1:57
  • Server.Executeを利用するということは、動的にコントロールを追加しているようなイメージになりますね。

    #実際のところはちょっと違うでしょうけど。

    最初に動的に追加した部分は、PostBack時にもやはり動的に追加してあげないと、その部分のイベント等は発生しなくて当然のように思います。

     

    2006年11月9日 6:15
  • 返答ありがとうございます。

    >最初に動的に追加した部分は、PostBack時にもやはり動的に追加してあげないと、

    >その部分のイベント等は発生しなくて当然のように思います。

    動的に追加して試してあります。

    ポストバック発生時に、Server.Executeを追加したのですが、

    GetPostBackEventReference が入っていると、

    リンクボタンのイベントがキャンセルされています。

    本来は、リンクボタンをクリックすると

    ①ポストバック

    ②Onload

    ③リンクボタン_Click

    の順番で流れますが、現状は、

    ①ポストバック

    ②Onload

    で、③リンクボタン_Click が実行されない次第です。

    ポストバック発生時には、Server.Executeではなく、

    別のもので発行方法があるのでしょうか?

    よろしくお願いします。

    2006年11月9日 7:25
  • またまた、遅くなりました。

    Server.Exclude を利用しているとのことですが、
    こういった用途にはASP.NETではユーザコントロールを
    利用します。

    ユーザコントロールで考えていることは実現できますし、
    通常のaspxと開発方法もあまり変わりませんので、
    試してみてください。

    2006年11月12日 12:54
  • なるほど、Server.Excludeを利用する場合は、

    ユーザーコントロールの方がいいですね。

    Server.Exclude(***.aspx)で利用していました。

    使い方自体も間違えていたんですね。

    ありがとうございました。

    2006年11月13日 0:20