質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.07%

asp.net LinkButtunのonclick属性

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 185

nao0201

score 1

開発環境:visual studio2013 .netFramework4.5

ASP.NET WebFormsのLinkButtonで、
OnClientClick="this.form.target = '_blank';"を設定し、postbackurl="aaa.aspx"
で別ウインドウにPOSTBACKするようにしています。

さらに、onclik属性にサーバー側のクリックイベントに飛ぶようにしているのですが、
onclick="testfunc"
onclientclickで別ウインドウにPOSTBACKはできるのですが、
onclickのサーバー処理に入らないのです。

理想としては、サーバー処理(C#)を実行後、別ウインドウに遷移するようにしたいです。
WEBアプリは不慣れですがよろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • SurferOnWww

    2020/05/23 15:13

    > 流れとしては、
    > リンクボタンが押された情報をSQLSERVERへINSERT(onclick="testfunc")
    > ↓
    > 別サイトへPOSTBACK

    その流れだけで考えると、クロスページポストバックは使わずに、ボタンクリックで普通にポストバック ⇒ サーバー側のボタンクリックイベントのハンドラで SQL Server に登録 ⇒ 別サイトへリダイレクト(POSTBACK ではなくて)・・・というのが普通です。

    その際別サイトにユーザー情報を渡したいということであれば、クエリ文字列を使う以外に方法はなさそうです。それで SSO とやらは実現できないかもしれませんが。

    キャンセル

  • nao0201

    2020/05/23 16:16

    経験が浅く、実現できるかも手探りの中開発しております。。
    上手くお伝えできずすいません。

    外部のサイト(他のベンダー構築サイト、同一アプリケーションではない)へユーザ情報をPOSTで渡して欲しいと仕様(POSTした情報で外部サイトはログインできる)でありますので、クロスページPOSTBACKで渡そうと考えました。

    postbackurl="自分自身と同じアプリケーションでは無いサイト"はできないのでしょうか?
    ※検討違いの事を言っていたらすいません。。

    POSTBACKを使わずにPOST送信するというのができればよいのかと思いますが、おっしゃる通りの
    「ボタンクリックで普通にポストバック ⇒ サーバー側のボタンクリックイベントのハンドラで SQL Server に登録 ⇒ 別サイトへリダイレクト」でいけそうな気もしますが。

    クエリ文字で渡すのは要件と違いますのでNGです。

    キャンセル

  • SurferOnWww

    2020/05/23 17:07 編集

    > postbackurl="自分自身と同じアプリケーションでは無いサイト"はできないのでしょうか?

    絶対できないとまで言い切る自信はないですが、もし仮にできたとしても、「ボタンクリックで普通にポストバック ⇒ サーバー側のボタンクリックイベントのハンドラで SQL Server に登録 」という流れはどうしても必要なわけですから、その中にクロスページポストバックを入れられる余地はないと思いますけど。

    流れの一番最後の「 ⇒ 別サイトへリダイレクト」というところで、自サイトのあるページにリダイレクトしてその応答が戻ってきたら、そのページに仕込んだクライアントスクリプトでクロスページポストバック相当のことをするというのが可能性として思いつきますが・・・ (思い付きレベルです。他のサイトに何をどういう形でポスつするのかもわかりませんので)

    キャンセル

回答 1

checkベストアンサー

+1

おっしゃる通りの「ボタンクリックで普通にポストバック ⇒ サーバー側のボタンクリックイベントのハンドラで SQL Server に登録 ⇒ 別サイトへリダイレクト」でいけそうな気もしますが。クエリ文字で渡すのは要件と違いますのでNGです。

クエリ文字列が NG であれば、質問のコメントにも書きましたが、一番最後の「 ⇒ 別サイトへリダイレクト」というところで、自サイトのページにリダイレクトして、その応答が戻ってきたら、そのページに仕込んだクライアントスクリプトでクロスページポストバック相当のことをする方向で検討してはいかがですか?

別ページにリダイレクトしなくても、ポストバックでそのまま同じページが再描画されたときに、目的の別サイトに POST するクライアントスクリプトを仕込んで window.onload でそれを起動してもいいかもしれません。

動くかどうかわかりませんが、そのクライアントスクリプトは PostBackUrl を設定したボタンをクリックするだけでも良いかもしれません。

クロスページポストバックは、クライアント側は基本的にクライアントスクリプトで form 要素の action 属性が PostBackUrl プロパティに設定された url に書き換えられ、その後 form が submit されるという仕組みになっています。

クロスページポストバックはサーバー側の仕組みがいろいろあって、それがないと ASP.NET システム全体としての動作に支障が出るはずですが、他のサイトに POST するだけなら目的は果たせるかもしれません。ダメかもしれませんが。自分で検証してみてください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/05/23 23:36

    ご回答ありがとうございます。

    linkbuttonのonclient属性(新規ウインドウ起動)を外して、
    サーバー側で、クライアントの新規ウインドウを開き、そこにPOSTする処理をjavascriptで仕込んでみます。
    今、開発環境が無い為、週明け検証してみます。

    キャンセル

  • 2020/05/24 10:00 編集

    > サーバー側で、クライアントの新規ウインドウを開き、そこにPOSTする処理をjavascriptで仕込んでみます。

    その言葉通りのことは不可能です・・・が、たぶん、「ボタンクリックで普通にポストバック ⇒ サーバー側のボタンクリックイベントのハンドラで SQL Server に登録 ⇒ 同じアプリの別 aspx ページへリダイレクト ⇒ その aspx ページに別サイトに SSO とやらに必要な情報を POST する JavaScript コードを仕込んでおいて window.onload で起動する」ということで、それがうまく文章で表現できてないだけであろうと想像して、結果の連絡をお持ちします。

    キャンセル

  • 2020/05/25 22:10

    >ボタンクリックで普通にポストバック ⇒すいません、ここが理解できませんでした。

    残りの「サーバー側のボタンクリックイベントのハンドラで SQL Server に登録 ⇒ 同じアプリの別 aspx ページへリダイレクト ⇒ その aspx ページに別サイトに SSO とやらに必要な情報を POST する JavaScript コードを仕込んでおいて window.onload で起動する」で思った通りの処理を実装する事ができました。
    (補足)
    > 同じアプリの別 aspx ページへリダイレクト
     この後は元のページ(リンク元)に戻る必要がありましたので、別窓にPOSTした後javascriptにて元ページへ戻る処理を追記しました。
    ※別窓で開いた時にポップアップがブロックされる別の問題が出てきましたが…(サファリ)

    分かりやすくご教示頂き、ありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.07%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る