1

私はこれについて多くを知ることができませんでした…</p>

クエリ文字列を使用して別の場所のコードから呼び出されるASPページがあります。

[domainpath]/FulfilmentReceipt.aspx?fulfilmentId=226F7486-3D30-439D-92BB-94972234A809

応答の実行を別のクエリ文字列を持つ別のページに移動する必要がPage_Loadある呼び出しがあります(以下は正常に機能しているようです)。Server.TransferFormat()

Server.Transfer(String.Format("confirmationReceipt.aspx?bId={0}&f={1}&print=true", basketId, franchiseeId)))

次に、私にはわからないことがあります。転送呼び出しは、最初のページであるFulfilmentReceipt.aspxにルーティングされているように見えますが、新しいクエリ文字列が使用されています。fulfilmentIdクエリ文字列の一部が欠落しているため、これによりエラーが発生します。なぜこれがconfirmationReceipt期待どおりに呼び出されないのですか?

confirmationReceiptプロセスにデバッグすることでページが呼び出されず、fulfilmentReceipt2回読み込まれることを確認できます。Global.asaxファイルにはコードがまったくないため、そこへのルーティングはなく、confirmationReceiptページ自体にはRedirectまたはTransfer呼び出しがなく、非常に単純です。

さらに、ブラウザのアドレスバーに表示されるエラーページには、新しいクエリ文字列が元のURLの一部として表示されます。表示されたURLは、の結果として変更されるべきではないと思っていましたServer.Transfer

何か案は?

どうもありがとう。

アップデート

私は実際の進歩はありませんでしたが、Richthofenのアドバイスに従うとある種の結果が得られました。DOESのResponse.Redirect代わりに使用すると、ブラウザからの呼び出しで望ましい結果が得られます。Server.Transferただし、呼び出しは、リダイレクト応答を処理できないサードパーティのライブラリによって行われます。

Server.TransferこのpreserveFormオプションを試してみても違いはありません。明確にするために、転送は最終的にを呼び出しFulfilmentReceipt.aspx?bId={0}&f={1}&print=trueます。間違ったページ、正しいクエリ文字列。

より多くの更新

confirmationReceipt渡されたクエリ文字列を受け入れるようにページをリファクタリングし、クエリ文字列を指定せずに単純に転送するように呼び出しをfulfilmentReceipt変更することで、問題を解決しました。転送は、元のクエリ文字列で適切な場所に移動します。Server.TransferconfirmationReceipt

好奇心からはまだ疑問が残ります。Server.Transferクエリ文字列を含むURLを正しく処理できないのは単純ですか?

4

2 に答える 2

1

上記の更新として最初に投稿されたように、fulfilmentReceiptに渡されたクエリ文字列を受け入れるようにconfirmationReceiptページをリファクタリングし、Server.Transfer呼び出しを変更して、クエリ文字列を指定せずにconfirmationReceiptに転送することで問題を解決しました。転送は、元のクエリ文字列で適切な場所に移動します。

一部の処理が2回行われるようになったため(クエリ文字列をより便利なものに変換する)、理想的ではありませんが、機能するので満足しています。

于 2012-10-02T14:35:55.083 に答える
0

Server.TransferとResponse.Redirectはしばしば混同されます。新しいクエリ文字列値を渡したい場合は、Response.Redirectを使用する必要があります。

Server.Transferは、IIS/ASP.NETによって処理されている単一の要求の動作を変更します。サーバー上で新しいリクエストを開始しますが、エンドユーザーにとってはリクエストは同じページのままです。基本的に、新しいページに制御を渡します。フォーム値を保持するために渡すことができるパラメーター、ブール値があります。ただし、通常、クエリ文字列パスを変更する場合は、Response.Redirectを使用して、URLがユーザーのブラウザに表示されるようにする必要があります(user-agentは200OKではなく302リダイレクトを受信します)。

「転送コールはFulfilmentReceipt.aspxにルーティングされているようです。」

おそらくconfirmationReceipt.aspxには「FulfilmentReceipt.aspx」へのリダイレクトがあるようです。ただし、「True」を渡していないため、受信クエリ文字列IDは失われます。2番目のパラメーターとして「true」をServer.Transferに渡すと、この例が機能する可能性があります。ただし、私のコードの場合の最善の策は、これをResponse.Redirectで変更し、Fiddlerまたは別のツールで応答トレイルを監視して、内部で何が起こっているかを正確に確認することです。

于 2012-07-31T15:09:44.453 に答える