私はupdatepanelを使って少しテストを行いましたが、私が知る限り、Response.IsRequestBeingRedirectedというプロパティを見て、応答が更新パネルによってリダイレクトされているかどうかを判断できます。このプロパティは、updatepanels内部からのリダイレクトを見ているときと、通常のリダイレクトを行っているときの両方で正しく答えているようです。問題は、レスポンスが更新パネルによってリダイレクトされるとき、Response.RedirectLocationがnullであることです。つまり、URLを変更するためにレスポンスの実際の内容を変更する必要があります。
レスポンス出力ストリームが書き込み専用であるため、内容を変更して応答を上書きすることもできないため、レスポンスの内容を変更するのは非常に難解です。私が見つけた唯一の方法は、Hereと記載されているように、応答にフィルターを接続する必要があります。しかしこれは多少複雑で、かなりのコードを必要とし、PreSendRequestContentの前にフィルターを接続する必要があります(私は正確なタイミングはわかりませんが...)。これはフィルターを作成する必要があることを意味しますコンテンツを変換するかどうかを決定するためにレスポンスへの参照を取る。
上記フィルタはやり過ぎのように思えるので、多分あなただけの正規表現を使用することによって、あなたのjavascriptのビットをクリーンアップすることができます:
var redirectRegex = /pageRedirect\|{2,}(\S+)\|/;
function changeURL(sender, args) {
var s = new String(sender._xmlHttpRequest.responseText);
var match = redirectRegex.exec(s);
if (match)
{
encodedURL = decodeURIComponent(match[1]);
window.location.href = DoCustomizationsOntheURL(encodedURL);
args.stopPropagation();
}
}
しかし、上記の正規表現は、私のテストのURLに取り組んでいますが、私はできませんそれがすべてのために働くことを保証する。
URLを変換してリダイレクトポイントで呼び出す静的/拡張メソッドを考えましたか?
この機能を追加しようとしている従来のアプリに触れていない場合は、私は拡張ルートに行っても構いません。 Response.Redirectから新しい内線番号に呼び出しを変更する必要がある場所がかなりあります。私は正規表現の考え方が好きで、それを私のソリューションに統合します。 –
レガシーアプリケーションを更新していて、アプリケーション全体で機能するソリューションが必要な場合は、おそらく前述のレスポンスフィルタを検討する価値があります。それはかなりの定型文を必要としますが、かなり堅牢で、あなたはjavascript実装の気まぐれに依存しないでしょう。 – rusmus
このフィルタの唯一の問題は、私がしたくないレスポンスバッファの内容を変更する必要があることです。Javascriptは、マスターページレベルで追加するとうまく機能します。 –