ViewState不起作用

时间:2012-04-19 15:42:07

标签: asp.net vb.net

我有以下代码尝试使用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。

我错过了什么?

2 个答案:

答案 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。

http://wiki.asp.net/page.aspx/298/hiddenfield/

答案 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

没有其他任务,价值永远不会改变。