2009-10-27 54 views
0

我有一個VB.Net網站,並在我的註冊頁面我將SessionState中存儲ViewState。我正在使用下面的代碼來實現這一點。問題與ViewState堅持會話時使用IE(但不是FF)

Private _sessionViewStatePersister As System.Web.UI.PageStatePersister 
Protected Overrides ReadOnly Property PageStatePersister() As System.Web.UI.PageStatePersister 
    Get 
     If _sessionViewStatePersister Is Nothing Then 
      _sessionViewStatePersister = New SessionPageStatePersister(Me) 
     End If 
     Return _sessionViewStatePersister 
    End Get 
End Property 

這一直是個做工精細,然後我開始看到偶爾「System.NullReferenceException:對象引用未設置到對象的實例。」。

當我嘗試從DropDownList的SelectedItem中獲取文本屬性的值時引發異常,問題是DropDownList在頁面回發後不包含項目。

問題只存在於使用IE瀏覽器(根據我的日誌7或8,但我只測試8),但不是當使用FireFox 3.5時。

恢復使用正常的ViewState持久性機制導致頁面再次在IE中工作。 沒有記錄ViewState相關的異常,它就像頁面'認爲'它沒有存儲ViewState。

有誰知道可能會導致這種情況,有沒有最近的IE補丁可能是罪魁禍首? 有沒有其他人遇到類似我所描述的東西?

謝謝!

回答

2

您是否使用無Cookie會話?如果沒有...

默認情況下,會話狀態需要在客戶端瀏覽器上啓用Cookie。如果您將ViewState存儲在Session中,那意味着ViewState頁面現在依賴於Cookie ...因此,可以在客戶端禁用,從而中斷您的應用。

事實上,它只發生在IE瀏覽器可能只是巧合?

+0

很好的答案。巧合的是,我在測試中禁用了Cookie。 :S這是有道理的,我會看到IE導致這個問題,因爲企業環境更可能禁用cookie。 – withakay 2009-10-28 10:59:25