我有以下代码尝试使用viewstate来保存变量以进行回发。回发后,SrString值为空。我在下拉列表索引chane事件中设置了ViewState值,并在if ispostback块的页面上将变量设置为等于ViewState(“SrString”)。
有人可以帮忙吗?
由于
'Page Load
If IsPostBack Then
SrString = ViewState("SrString")
End If
'DropDownList Index change event
Protected Sub ByteDataFile_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles ByteDataFile.SelectedIndexChanged
ViewState("SrString") = SrString
End Sub
我的网络配置文件是正确的,因为我在网站上有其他页面可以使用viewstate。
我错过了什么?
答案 0 :(得分:2)
这是因为Page_Load在ByteDataFile_SelectedIndexChanged之前执行。
ASP.NET页面生命周期始终首先执行Page_Load,然后处理点击和SelectedIndexChanged等事件,因此当您在Page_Load中说SrString = ViewState("SrString")
时,ViewState("SrString") = SrString
行尚未被调用。< / p>
http://msdn.microsoft.com/en-us/library/ms178472.aspx
假设您从dropDownList的所选项目中获取SrString的值,您只需要在Page_Load中获取它,类似于:
If IsPostBack Then
'I got this from your comment in the other answer, but I suppose LineNo and FileNameID are comming somehow from the drop downlist, right?
ViewState("SrString") = "\\...\soi\Bytewise\Line " & LineNo & "\Text Files\" & FileNameID
End If
您需要确定的另一件事是DropDownList将其AutoPostBack属性设置为true,否则在您更改选择时页面将不会回发。
对于这种事情,我认为你应该使用HiddenField而不是ViewState。
答案 1 :(得分:2)
SrString
在哪里设置?从您发布的代码中,它只被分配到ViewState或从ViewState分配,因此将始终为null。
更多解释:
If IsPostBack Then
SrString = ViewState("SrString")
End If
'DropDownList Index change event
Protected Sub ByteDataFile_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles ByteDataFile.SelectedIndexChanged
ViewState("SrString") = SrString
End Sub
在页面加载中,我们将SrString设置为视图状态中的值。
在更改的事件中,我们将ViewState设置为SrString的值。
但是,SrString在任何时候都没有设置为一个值,所以你只是传递一个空值。需要有,某处:
SrString = 'some value from somewhere besides the viewstate.
假设:
A = B
B = A
没有其他任务,价值永远不会改变。