2011-12-18 84 views
2

我使用的是​​的Response.Redirect()重定向到一個頁面中的子文件夾

自從我搬到我login.aspxAccount子文件夾中,我嘗試下面的代碼,但它不工作。

Response.Redirect("Account/login.aspx"); 

這個設法重新指向這個網址:

http://localhost/BuzzEnhance/Account/Login.aspx 

完整的代碼是:

public partial class BuzzMaster : MasterPage 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      if (Session["Username"] != null) 
      { 
       username.Text = Session["Username"].ToString(); 
      } 
      else 
      { 
       Response.Redirect("Account/Login.aspx"); 
      } 
     } 
    }  
} 

還有一件事都默認頁面和登錄頁面使用相同的主頁。

+3

-1甚至沒有試圖郵寄可讀的問題。 – 2011-12-18 11:58:12

+0

至少粘貼沒有拼寫錯誤的代碼(英文錯誤是可以接受的,但是你發佈的每個地方都有'響應'的錯誤,並且你發佈的URL和重定向行不匹配) – Mat 2011-12-18 11:59:54

+0

編輯..我需要從根文件夾到子文件夾名稱Accont和一個名爲login.aspx的頁面..如何 – user614946 2011-12-18 12:00:22

回答

4

你的問題是你正在做一個MasterPage的重定向,並使用相對路徑。

當您使用相對路徑時,它將相對於綁定到主頁面的內容頁面的位置,相對於主頁面的位置而言是而不是

您重定向到:

/BuzzEnhance/Account/Account/Login.aspx 

幾乎可以肯定是在綁定到你的主頁的帳號文件夾中的內容頁面的到來。例如,如果您的登錄頁面(/ BuzzEnhance/Account/Login。aspx)本身綁定到該母版頁,它將重定向到相對路徑Account/Login.aspx,該路徑將解析爲/BuzzEnhance/Account/Account/Login.aspx,正如您所看到的。

最好的解決方案是在@abatishchev的答案中 - 使用相對於應用程序根目錄~/Account/Login.aspx的路徑。

但是,如果您懷疑您的Login.aspx頁面綁定了相同的母版頁,這會給您帶來另一個問題。每次訪問Login.aspx時,它都會在母版頁中執行重定向代碼,導致無限循環,直到超時。

一種解決方案是避免將Login.aspx頁面綁定到該主頁面,或者添加一些條件代碼,以便在Login.aspx頁面上不重定向。

雖然更好,但如果您使用表單身份驗證並使其以標準方式管理重定向到登錄頁面,則根本無需執行重定向。如果你想顯示的用戶名,你可以使用HttpContext.Current.User.Identity.Name - 或使用ASP.NET登錄控件之一:LoginStatusLoginName,...

+0

謝謝,剛剛清除了我的想法,謝謝..我會這樣做,並在這裏更新你... – user614946 2011-12-18 12:56:48

2

首先它不是responce.redirect("page.aspx");

Response.Redirect("Page.aspx");

嘗試這種方式會工作。根據你的問題Response.Redirect("folder/page.aspx");現在嘗試,我會等待。

請記住在C#中的第一個字母應該大寫。

+0

做了那個傢伙什麼都沒有......編輯我的帖子爲sry的錯字錯誤.. – user614946 2011-12-18 12:04:01

+0

其大寫...但沒有... – user614946 2011-12-18 12:05:27

+0

問題是頁面的代碼已經在不同的子文件夾內,稱爲「BuzzEnhance」所以相對路徑是相對於該位置。 – 2011-12-18 12:12:07

1

你需要的是這樣的:

Response.Redirect("/Account/Login.aspx"); 

這將去駐留在根裏,並在那裏以Login.aspxAccount

+0

沒有運氣,它給了我http:// localhost:10773 /帳戶/ Login.aspx但我需要的是http: //localhost:10773/BuzzEnhance/Account/Login.aspx – user614946 2011-12-18 12:15:16

+0

行,看看[這個答案](http://stackoverflow.com/a/8551633/447356) – 2011-12-18 12:17:29

5
"~/Account/Login.aspx" 

會給

"<app root>/Account/Login.aspx" 

所以如果你的應用程序的根是

http://localhost/BuzzEnhance 

中給出。將擴大的相對路徑

http://localhost/BuzzEnhance/Account/Login.aspx 

此外,如果你正在使用窗體身份驗證,您可能需要使用

FormsAuthentication.RedirectToLoginPage(); 

看到MSDN

+0

+1,忘了那個魔法角色! – 2011-12-18 12:17:03

+0

@ShadowWizard它仍然HTTP錯誤400 - 錯誤的請求。 – user614946 2011-12-18 12:19:51

+0

@ user614946:請注意,我已將端口號刪除爲不重要。 – abatishchev 2011-12-18 12:23:06

0

試試這個

Response.Redirect(this.ResolveClientUrl("~/Account/Login.aspx"); 
相關問題