2009-06-16 51 views
0

我用下面的MSDN代碼我的母版頁上,如果瀏覽器接受Cookie檢測:錯誤處理頁面上遞歸重定向

protected void Page_Load(object sender, EventArgs e) 
{ 
    if(!this.IsPostBack) { 
     if(Request.QueryString["CookieTest"] == null) { 
      Response.Cookies["TestCookie"].Value = "Test"; 
      Response.Redirect("CookieCheck.aspx.redirect=" + Server.UrlEncode(Request.Url.ToString()))); 
     } 
     else if((string)Request.QueryString["Test"] == "passed") { 
      // my stuff... 
     } 
    } 
} 

的CookieCheck.aspx包含以下內容:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if(Request.Cookies["TestCookie"] == null) 
     Response.Redirect(Request.QueryString["redirect"] + "?Test=notPassed", true); 
    else 
     Response.Redirect(Request.QueryString["redirect"] + "?Test=passed", true); 
} 

在web.config我已經定義了以下內容:

<customErrors mode="On" defaultRedirect="Error.aspx" /> 

現在識別餅乾工程好吧,但我有這個問題:每當頁面發生錯誤,我應該重定向到Error.aspx(並且這在整個cookie檢測事情之前工作),重定向似乎停留在一個無限循環,並追加越來越多的「 ?測試=傳遞「到URL。我應該提到Errors.aspx也有相同的masterpage,因此也執行cookie檢查。但我不知道爲什麼重定向不停止。有沒有辦法解決這個問題,而不是將Errors.aspx頁面從主頁面中排除?非常感謝你。

回答

1

如果CookieCheck.aspx頁面也使用相同的母版頁,它將繼續遞歸重定向,請確保CookieCheck.aspx不使用相同的母版頁。

我寧可建議不要使用MasterPages,Master網頁設計用於Visual Inheritance而非代碼繼承,如果您希望製作一些特殊類型的頁面來檢查瀏覽器使用Cookie的能力,您可以有

public abstract class CookieEnabledPage : Page 
{ 
} 

這些網頁的一個新的基類,你的邏輯添加到這個類,那麼每當你需要一個新的頁面,這種行爲你從這個基類繼承。我認爲這是一種更乾淨的方式來做你想做的事情。

+0

不,CookieCheck.aspx沒有母版頁,所以這不是原因。 你的新基類的方法看起來很乾淨合理,我會考慮這個。 – noisecoder 2009-06-17 12:22:27

0

我猜測masterpage(或masterpage-error.aspx組合)引發了一個異常,觸發重定向到error.aspx,這反過來導致masterpage重新啓動它的生命週期並引發一個新的異常。 「?Test = passed」的連接幾乎肯定是每次發生錯誤重定向時重新調用cookie測試的副作用。 我建議啓動調試器,並在Masterpage.aspx.cs中的Page_Load中設置一個斷點,並逐步執行,直到您重定向到錯誤頁面(執行的最後一行是引發異常的那一行)。

+0

我剛剛檢查過這一個,我不認爲這是原因。更像是它不斷地在錯誤頁面的page_load,masterpage的page_load和cookietest頁面之間切換,沒有任何理由。 – noisecoder 2009-06-17 13:28:40