请考虑以下代码:
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。我无法弄清楚发生了什么。 :\
哦,我刚想通了。看看你是否注意到它。
<
答案 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。