2009-08-25 74 views
0

我有一個網站會在用戶閒置一段時間後將其登出。Respone.Redirect偶爾會導致錯誤,但我無法重現它

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

但在過去幾天的三次我收到以下異常:這是由下面的代碼完成

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) 

起初的錯誤似乎是顯而易見的,因爲logout.aspx不包含在「Person」文件夾中,但是在根級別,但爲什麼每次從「Person」文件夾註銷時都不會發生這種情況?我一遍又一遍地做了同樣的例程,但是這個錯誤幾乎從未發生過。

任何想法?

回答

1

您可以通過編寫完整的解決路徑進入頁面如下確保你總是有正確的路徑到你的站點的根目錄(假設你的註銷頁面是在根文件夾):

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

如果你的註銷頁面是不是在根文件夾,請執行以下操作:

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

這樣即使您的開發和生產的路徑是不同的重定向會工作。

希望這會有所幫助。

+0

是的,這個方法肯定比使用靜態URL更可靠。 – Kezzer 2009-08-25 08:30:25

2

你的代碼更改爲以下:

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

通過消除'。從你總是去尋找網站根目錄的URL。

編輯:
作爲Erikric想去虛擬文件夾「NIR310」根目錄下的註釋中規定。

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

他正在使用。上一個目錄,不是嗎?所以他肯定會想'/NIR310/Person/logout.aspx?timeout = true'? – Kezzer 2009-08-25 08:20:05

+0

如果他想上一個目錄,他不應該使用..然後呢?但在他的問題中,他指出logout.aspx文件位於根級別。 – RuudKok 2009-08-25 08:26:38

+0

對不起,我這裏有點不清楚。以root身份,我的意思是在虛擬目錄的根文件夾中。這裏的建議沒有奏效,因爲它把我帶到serverName/logout.aspx – erikric 2009-08-25 08:44:21

相關問題