2011-09-30 96 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)]