2010-03-25 39 views
2

我一直在使用會話陣列來存儲我的WebPart狀態變量...所以我有這樣的特性:的WebPart context.session爲空

public INode RootNode 
    { 
     get 
     { 
      return this.Context.Session["RootNode"] as INode; 
     } 
     set 
     { 
      this.Context.Session["RootNode"] = value as object; 
     } 
    } 

這通常工作正常。我發現有時,context.session變量將爲空。

我想知道會導致會話爲空的條件是什麼,以及在發生這種情況時堅持我的對象的最佳方式是什麼?我是否可以爲上下文分配一個新的HttpSessionState對象,還是這樣做了?


編輯:好的,所以它不只是會話是空的......整個上下文都搞砸了。當webpart進入init時,上下文沒問題......但是當它到達dropbox selectedindexchange回發事件(dropbox包含用於設置rootnode變量的節點id)時,上下文主要包含null屬性。

此外,它似乎只在選擇某個ID時發生。這看起來更像是我的一種奇怪的錯誤,而不是我對會話的理解。

回答

0

System.Web.HttpContext.Current.Session

然而,上下文不依賴於類,每說。它取決於正在使用的頁面/處理程序的上下文。

-Theo

0

我不知道這是什麼類型的文件,但我也有類似的問題,一個ashx的文件。解決方案是處理程序必須實現IReadOnlySessionState(用於只讀訪問)或IRequiresSessionState(用於讀寫訪問)。例如:

public class login : IHttpHandler, IRequiresSessionState { ... } 

這些接口不需要任何額外的代碼,但充當框架的標記。

希望這可以幫助。

Jonathan