0

我有以下代码尝试使用视图状态来保存回发变量。当回发发生时,SrString 值什么都不是。我已经在下拉列表索引 chane 事件中设置了 ViewState 值,并在 if ispostback 块的页面中设置了等于 ot 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

我的网络配置文件是正确的,因为我在网站中有其他页面可以正常使用视图状态。

我错过了什么?

4

2 回答 2

2

这是因为 Page_Load 在 ByteDataFile_SelectedIndexChanged 之前执行。

ASP.NET 页面生命周期总是先执行 Page_Load,然后它处理点击和 SelectedIndexChanged 等事件,所以当您SrString = ViewState("SrString")在 Page_Load 中说时,该ViewState("SrString") = SrString行还没有被调用。

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/

于 2012-04-19T15:45:35.380 回答
2

在哪里SrString设置?从您发布的代码中,它只会分配给 ViewState 或从 ViewState 分配,因此将始终为空。

更多解释:

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

并且没有其他赋值,值永远不会改变。

于 2012-04-19T15:46:05.770 回答