2011-09-30 103 views
0

訪問頁面時,我正在存儲會話狀態的值。當我點擊瀏覽器時,會話中的值恢復爲原始值。爲什麼會發生?當我回去時,我不會重置價值。會話狀態問題

這發生在iPhone和iPad上 - 所有其他瀏覽器都不回滾會話狀態值。

在此先感謝。

我使用這個JavaScript代碼(在兩個頁面代碼是相同的):

function pageLoad() { 
    // Get the current url path 
    var url = document.URL; 

    PageMethods.IsNavigatingBackward(url, handleCallback); 
} 

function handleCallback(isBackward) { 
    if (isBackward) { 
     // Go back to previous page 
     history.back(); 
    } 
    else { 
     // Set the current url in the session 
     var url = document.URL; 

     PageMethods.SetCurrentPage(url, getLocation); 
    } 
} 

而後面的代碼:

[WebMethod] 
public static bool IsNavigatingBackward(Uri url) 
{ 
    string currentPath = url.LocalPath; 
    string lastPath = (string)HttpContext.Current.Session["LastPage"]; 
    bool isBackward = false; 

    NavigationList table = NavigationList.GetInstance(); 

    if (table.IsBackwardNavigation(currentPath, lastPath)) 
    { 
     isBackward = true; 
    } 

    return isBackward; 
} 

[WebMethod] 
public static void SetCurrentPage(Uri url) 
{ 
    HttpContext.Current.Session["LastPage"] = url.LocalPath; 
} 
+0

給我們一些代碼,你確定變量沒有存儲在視圖狀態? – Peter

+0

joek1975

回答

0

我想你是誤會發生了什麼事情。更可能的是,頁面沒有被重新下載(因此會話實際上並未設置爲任何內容)。它只是使用以前緩存的下載頁面。

+0

在這種情況下,該方法是從javascript onLoad - PageMethods.SetCurrentPage(url);中調用的靜態函數。我已經能夠在聲明中設置一個斷點並逐步完成。 – joek1975

+0

這是重要的信息,並徹底改變了問題的上下文。現在你正在處理靜態問題。沒有看到代碼,我們無法幫助你。 –

+0

附上代碼。 – joek1975

1

您將只能看到新的會話狀態值,如果瀏覽器是:

  • 接受cookie
  • 也不顯示緩存的原始頁面

如果兩者都這些都是真的,並假設您不會在第二次加載頁面的某處返回值,您將看到會話狀態。

它會出現iPhone和iPad沒有這樣做。

+0

如何在返回時強制重新加載頁面? – joek1975

+0

你不能,但你可以[請求瀏覽器不要緩存](http://msdn.microsoft.com/en-us/library/w9s3a17d(v = VS.100).aspx),所以將被迫每次重新加載。 –

+0

你能舉個例子嗎? – joek1975

0

你可以嘗試使用,而不是執行以下操作:

[WebMethod(EnableSession = true)]