ユーザーコントロールを介して構築されたリピーターを備えたaspxwebformsページがあります。各リピーターアイテムにはリンクボタンがあります。私がしたいのは、LinkButton(ページAのユーザーコントロールのリピーター内)がクリックされると、URLが新しいタブで開かれ、そのLinkButtonの横にある非表示のIDが渡されることです(セキュリティに関するWeb開発のベストプラクティスに従って)可能であれば)新しいタブのaspxページ(ページB)に移動します。
ページAとページBの両方が同じアプリケーションにあります。
上記の目的は、ユーザーがLinkButtonをクリックして開いたURLから戻った後、検索結果に簡単に戻ることができるようにすることです。
私は、これを行う方法について、標準的なベストプラクティスの方法に近いアイデアを受け入れています。
これまでのところ、私は試しました:
1)クロスページ投稿–これは、IDを渡すためには機能しましたが、新しいタブで開くためには機能しませんでした。
2)PostBackUrlをページBのURLに設定し、OnClientClickでPage.Form.Target = "_ blank"を設定してjavascriptを呼び出し、ユーザーコントロールからの非表示IDをページBのhtml非表示入力の値に設定します。
3)OnClientClickでwindow.open( "page B url"、 "_newtab")も使用してみました。
-
a) これまでのところ、正しく機能した唯一の方法は、上記の3つの異なる方法のうちの2番目の方法でした。
ただし、ページBが新しいタブに読み込まれた後、ページAのPage.Form.Targetを「_blank」に設定する前の状態にリセットする方法がわかりません。 -
b)Page.Form.Targetをリセットするために私が試した方法は、役に立ちませんでした。
-
1) ページAのPage_Loadでターゲットをリセットします。ここでIsPostBack == true->により、ページBはページAと同じコンテンツでロードされます。
-
2) ページAのユーザーコントロールのPage_Load->メソッド1と同じ結果でターゲットをリセットする
-
3)ページAのユーザーコントロールのターゲットをリセットするページAのユーザーコントロールのLinkButtonのOnUnLoad->メソッド1と同じ結果
-
4) LinkButtonのOnClientClickを介してjavascriptでターゲットをリセットする->は機能しませんでした
-
5)ページAのフォームへ の参照を含むページAからのパブリック変数を使用してページBのPage_Loadでターゲットをリセットする
(クロスページ投稿で実行できるのと同様)->は機能しませんでした。
次に試すことを考えているのは、次のとおりです。
1) ページAで別のユーザーコントロールをラップして、ページBのコンテンツをaspパネル(パネルB)に表示します。
2) ページBのコンテンツを新しいユーザーコントロールページに配置します
3) aspパネル(パネルA)のページAの検索結果コンテンツをラップします。
4) 新しいユーザーコントロールのリピーターのLinkButtonをクリックすると、パネルAの検索結果のコンテンツが非表示になり、パネルBが表示されます。
5) ユーザーが検索結果に戻りたい場合は、パネルBのコンテンツの[検索に戻る]リンクボタンをクリックすると、パネルBが非表示になり、パネルBのコンテンツがクリアされ、パネルAが表示されます。再び表示されます。
それがうまくいくかどうかはまだわかりません。
これはそれほど難しいことではないようです。
これは単純な概念であり、Web開発ではかなり一般的な状況だと思います。
ワイリー・コヨーテがロードランナーを捕まえようとしているような気がします。なぜなら、すべてが完全に失敗する、精巧で考え抜かれた計画を思いついたからです。
私は今、「助けて!