IIS6、ASP.NET 2.0、フォーム認証なし
Response.Redirect( "〜/ foo.aspx")を呼び出していますが、私のサイトのデフォルトのドキュメント( "Default.aspx")が表示されています。さらに悪いことに、それは断続的にのみ発生します。リダイレクトによって正しいページが表示されることがあります。
セッションの状態を確認しましたが、web.configに値が表示されません(つまり、20分のデフォルトを使用していると想定しています)。
もっと関連性のある情報を共有したいのですが(質問に答えるために最善を尽くします)。
何か案は?指定されたページにリダイレクトされないのはなぜですか?
編集:私はコードを詳しく調べて、詳細を学びました。
Ok。foo.aspxとfoo2.aspx(およびデフォルトのドキュメントであるDefault.aspx)があります。すべてのページは、Pageを拡張するBasePageから拡張されます。
BasePageには、ReturnPageという名前のプロパティがあります。
protected string ReturnPage {
get {
if (Session["ReturnPage"] == null) {
Session["ReturnPage"] = "";
}
return Session["ReturnPage"].ToString();
}
set { Session["ReturnPage"] = value; }
}
ユーザーがfoo.aspxのLinkButtonをクリックすると、クリックイベントハンドラーは2行のコードで終了します。
ReturnPage = ResolveUrl("~/foo.aspx");
Response.Redirect(ResolveUrl("~/foo2.aspx"));
foo2.aspxのPage_Loadに問題があり、そのエラー処理でResponse.Redirect(ReturnPage)が呼び出されます。
foo2.aspxの応答ヘッダーを表示すると、302の場所はstring.Emptyです(つまり、1つはありません)。その同じ応答ヘッダーには、foo.aspxの応答と同じASP.NETセッションIDがあります。
そして覚えておいてください-これは断続的です。場合によっては、そのLinkButtonをクリックして、foo2.aspxに簡単に移動できます。問題ありません。まったく同じデータでクリックを1回処理すると、失敗します。デフォルトのドキュメント(「バグ」によって送信されたDefault.aspx)からfoo.aspxに戻り、同じデータ(グリッド/テーブルの同じ行-同じLinkButton、基本的に)、問題なくfoo2.aspxにリダイレクトされます。