2009-08-25 10 views
0

私は、しばらくしてからユーザーをログアウトさせるウェブサイトを持っています。 logout.aspxではないため、エラーが明らかに見えた最初Respone.Redirectはしばらくの間エラーを引き起こしますが、再現できません。

System.Web.HttpException 

The file '/NIR310/Person/logout.aspx' does not exist. 

    at System.Web.UI.Util.CheckVirtualFileExists(VirtualPath virtualPath) 
    at System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile) 
    at System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile) 
    at System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory(VirtualPath virtualPath, HttpContext context, Boolean allowCrossApp, Boolean noAssert) 
    at System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(VirtualPath virtualPath, Type requiredBaseType, HttpContext context, Boolean allowCrossApp, Boolean noAssert) 
    at System.Web.UI.PageHandlerFactory.GetHandlerHelper(HttpContext context, String requestType, VirtualPath virtualPath, String physicalPath) 
    at System.Web.UI.PageHandlerFactory.System.Web.IHttpHandlerFactory2.GetHandler(HttpContext context, String requestType, VirtualPath virtualPath, String physicalPath) 
    at System.Web.HttpApplication.MapHttpHandler(HttpContext context, String requestType, VirtualPath path, String pathTranslated, Boolean useAppConfig) 
    at System.Web.HttpApplication.MapHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
    at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 

:私は次の例外を受け取った日の最後のカップルに

window.location = "./logout.aspx?timeout=true"; 

しかし3回:これは、次のコードによって行われます"Person"フォルダに含まれていますが、ルートレベルではありますが、 "Person"フォルダからログアウトするたびになぜこのようなことは起こりませんか?私は何度も同じルーチンを繰り返しましたが、エラーはほとんど起こりません。

アイデア?除去することにより

window.location = "/logout.aspx?timeout=true"; 

答えて

1

あなたは(あなたのログアウトページは、ルートフォルダにあると仮定すると)以下のようにあなたが常にページに完全な解決されたパスを記述することで、サイトのルートへの正しいパスを持っていることを確認することができます。

window.location = '<%= ResolveUrl("~/logout.aspx?timeout=true")%>'; 

あなたのログアウトページには、次の操作を行い、ルートフォルダにない場合:

window.location = '<%= ResolveUrl("~/Pathtoyourpage/logout.aspx?timeout=true")%>'; 

あなたの開発と生産の経路が異なっていてもリダイレクトが動作しますこの方法です。

これが役に立ちます。

+0

この方法は、静的URLを使用するより確実に信頼性が高くなります。 – Kezzer

2
は、次のようにコードを変更し

''あなたは常にサイトのルートに行くURLから。

EDIT:
コメントErikricで述べたように、仮想フォルダ「NIR310」のルートに行きたいです。

window.location = "/NIR310/logout.aspx?timeout=true"; 
+0

彼はtheを使用しています。彼はそうではありませんか?確かに彼は '/NIR310/Person/logout.aspx?timeout = true'を望んでいますか? – Kezzer

+0

もし彼がディレクトリを上りたいなら、彼は..を使ってはいけないのですか?しかし彼の質問では、彼はlogout.aspxファイルがルートレベルにあると述べています。 – RuudKok

+0

申し訳ありませんが、私はここで少し不明でした。 rootで、私は仮想ディレクトリのルートフォルダを意味しました。私がserverName/logout.aspxに連れて行ったので、ここの提案はうまくいきませんでした。 – erikric

関連する問題