2009-10-27 64 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