2009-07-23 44 views
3

「a.aspx」の私の 'Page_init()'に「server.transferrequest( "b.aspx")があります。Server.Transferrequest()と現在のURLを取得

これはうまくいきます。「b.aspx」のコンテンツが表示され、ブラウザルールは「a.aspx」のままです。

幸せな日々。

しかし、誰も私の "b.aspx"(結果のページ)からこのURLを見る方法を知っていますか?

通常のrequest.rawurlとrequest.url.absoluteuriは、両方とも現在のページを "b.aspx"として返します。

+0

あなたはあなたの仕事を解決しましたか?私は同じ問題に直面していたので... – Denis

答えて

2

Server.TransferRequestは、指定されたURLの非同期実行を実行します。これは、あなたのクライアントがサーバのところで起こっていることの手がかりがないことを意味します。クライアントの観点から見ると、同じページです。

実際のページ(最も一般的なページ)を変更する必要がある場合は、Response.Redirectを使用してください。

+0

私は元のURLを同じに保つ必要があります。 – maxp

+0

私が見る唯一の選択肢は、それをhiddenFieldとして保存することです。これを達成するための直接的な方法はありません。 – Sergio

1

転送する前に、必要な情報をどこかに保存してから、もう一度必要なときに取得することができます。

+0

をセッションに格納します。しかし、エレガントではありません。 – maxp

+0

'HttpContext.Current.Items'コレクションに格納することができます。それは転送中にアイテムを保持します。 –

1

あなたはサーバ転送を行い元のページを取得するためにPreviousPageを使用することができます。

string previousPagesUrl = PreviousPage.Request.RawUrl; 

EDIT: @maxpは、あなたのコメントへの回答として、PreviousPageだけServer.Transferのクロスページポストバックのために動作します。

場合は、PreviousPageためヌルを取得します:ソース・ページが先のページにリダイレクト

  • ソースページのリンクは、ページをリンク先ページに転送します。
+0

前のページがserver.transferrequest、つまりページc.aspxリクエストb.aspxを実行したページでない場合は、扱いにくい – maxp

0

あなたがこの方法を試してみました:

public void Transfer(string path, bool preserveForm) 

http://msdn.microsoft.com/en-us/library/caxa892w.aspx

私は現在、同じ問題になった、と私はServerオブジェクトがあなたに働かを与える転送方法では、このパラメータを持っていることが判明しました元の要求書式を保存するかどうかを決定します。

0
NameValueCollection headers = new NameValueCollection(); 
headers["RawUrl"] = HttpContext.Current.Request.RawUrl; 
Server.TransferRequest("b.aspx", true, null, headers); 

そしてb.aspxHeaders["RawUrl"]を使用しています。

関連する問題