.net Viewstate可能会停止工作的可能情况是什么?

时间:2009-01-09 17:03:30

标签: asp.net vb.net viewstate

请考虑以下代码:

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
        If Page.IsPostBack Then
            If ViewState("test") IsNot Nothing Then
                Response.Write((ViewState("test").ToString))
            Else 
                Response.Write("Viewstate is empty.")
            End If
        Else
            ViewState("test") = "viewstate is working."
        End If
    End Sub

此代码不适用于我的应用程序中的特定页面。在Page指令中没有关闭Viewstate。我无法弄清楚发生了什么。 :\

哦,我刚想通了。看看你是否注意到它。

  

<

5 个答案:

答案 0 :(得分:3)

想出来,有人改变了Page_Load事件来处理Page.Init

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init

答案 1 :(得分:1)

您也可以从配置文件中关闭viewstate。

<configuration>
  <appSettings>
    <Pages EnableViewState="false" />
  </appSettings>
</configuration>

答案 2 :(得分:1)

你确定要回发吗?

写道“Viewstate is empty”?或者什么都没有?

答案 3 :(得分:1)

既然你没有回答自己的帖子......

我会说你正在检查IsPostBack并在错误的阶段访问ViewState:

Handles Me.Init

那应该是

Handles Me.Load

正确?


为了调试ASP.NET中的这些令人头疼的问题,我还想补充说,跟踪通常可以帮助很多。

您可以通过将此添加到web.config来启用跟踪:

<configuration>
  <system.web>
    <trace enabled="true" pageOutput="true" requestLimit="40" localOnly="false"/>
  </system.web>
</configuration>

这会将堆栈跟踪和诸如此类的东西附加到每个页面的末尾,这样您就可以跟踪执行并(希望)找出问题。

答案 4 :(得分:1)

就我而言,我正在将数据写入Page_Init上的ViewState。这个数据在Page_Load和Page_PreRender上显示得很好,但是在生命周期结束时它没有被持久化到页面。回发后ViewState为空。

因此,请务必在Page_Init后写入ViewState。