2011-08-12 30 views
4

私はSystem.Web.UI.Pageから継承するBasePage.csから継承するDefault.aspxページを持っています。ベースページは、セッションがタイムアウトしたかどうかを確認する場所です。セッションがタイムアウトしてユーザーが何かをクリックすると、ユーザーを "Main.aspx"ページにリダイレクトする必要があります。ここでResponse.Redirect()が機能しません

は私のBasePageクラス

override protected void OnInit(EventArgs e) 
{ 
    base.OnInit(e); 
    if (Context.Session != null) 
    { 
     if (Session.IsNewSession) 
     { 
      string cookie = Request.Headers["Cookie"]; 
      if ((null != cookie) && (cookie.IndexOf("ASP.NET_SessionId") >= 0)) 
      { 
       HttpContext.Current.Response.Redirect("Main.aspx", true); 
       return; 
      } 
     } 
    } 
} 

HttpContext.Current.Response.Redirect( "Main.aspx"、真)内のコードです。

リダイレクトでBasePageの実行を停止し、すぐに飛び出したいと思います。問題は、そうではないということです。

デバッグモードで実行すると、リダイレクトとリダイレクトだけではないように、ステップスルーが続きます。 安全にリダイレクトするにはどうすればよいですか?

+2

私はこれが重複した質問だと思います。参照:http://stackoverflow.com/questions/372877/response-redirect-not-ending-execution – mikemanne

+0

http://stackoverflow.com/questions/372877/response-redirect-not-endingに記載されているすべてのソリューションを試しました。 -実行。何も働かなかった。 – BumbleBee

+0

@BumbleBeeこれは新しい質問を作成する正当な理由ではありません。 –

答えて

4

基本クラスがSystem.Web.UI.Pageから継承されているのを見ると、HttpContextを使用する必要はありません。それを試してみて、それが役立つかどうか見てください。

EDIT:Response.Redirectを

if (!Request.Url.AbsolutePath.ToLower().Contains("main.aspx")) 
{ 
    Response.Redirect("<URL>", false); 
    HttpContext.Current.ApplicationInstance.CompleteRequest(); 
} 
+0

ありがとうございます。私は試しましたが、問題は解決しません。 – BumbleBee

+0

リターンを取ってendResponseパラメータを省略して、それが何か違いがあるかどうかを確認できますか?排除のプロセス。 –

+0

成功しませんでした。 – BumbleBee

1

周りが追加されましたページのチェック私はそれはあなたが探しているまさにだとは思いませんが、多分これは動作します:

Server.Transfer("<URL>") 
1

私は苦労同じ問題が、Asp.Net MVC 3.0で発生します。 Response.Redirectは機能しませんでしたので、Controllerから継承できるRedirectToActionメソッドを使用する簡単な方法が見つかりました。

public class SessionExpireFilter : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     HttpContext context = HttpContext.Current; 

     if (context.Session != null) // check if session is supported 
     { 
      if (context.Session.IsNewSession) // if it says it is a new session, but exisitng cookie exists that means session expired 
      { 
       string sessionCookie = context.Request.Headers["Cookie"]; 

       if ((sessionCookie != null) && (sessionCookie.IndexOf("ASP.NET_SessionId") >= 0)) 
       { 
        string redirectTo = "~/Account/Expired"; 
        filterContext.Result = new RedirectResult(redirectTo); 


       } 
      } 
      else 
      { 
       base.OnActionExecuting(filterContext); 
      } 
     } 

    } 
} 

これはAsp.Net MVCでは問題なく動作しますが、Response.Redirect以外のものを使用する考えがあります。

関連する問題