第一次回发后不显示viewState值

时间:2012-07-16 12:42:21

标签: asp.net vb.net viewstate

我是asp.net的新手(经过多年的经典asp编程)。我正在尝试构建一个向字符串添加内容的页面。

我的代码如下:

的Default.aspx

<body>
<form id="form1" runat="server">
<div>
<p><asp:textbox id="tb" runat="server"></asp:textbox></p>
<asp:Panel ID="tbPanel" runat="server"></asp:Panel>
</div>
</form>
</body>

代码背后:

Partial Class demo_Default
Inherits System.Web.UI.Page


Public Property gesStr As String

Set(value As String)

ViewState("gesStr") = value

End Set

Get

Dim o As Object = ViewState("gesStr")

If o Is Nothing Then

Return ""

Else

Return o

End If

End Get

End Property


Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
Dim anzeigeStr As String = ""
If Page.IsPostBack Then
Else
gesStr = "1;"
End If
tb.Text = gesStr


Dim iButton As New Button
iButton.Text = "add"
iButton.CommandArgument = "1;"
AddHandler iButton.Click, AddressOf add
tbPanel.Controls.Add(iButton)


Me.anzeige()


End Sub


Private Sub add(ByVal sender As Object, ByVal e As EventArgs)
Dim myButton As Button = DirectCast(sender, Button)
Dim addString As String = myButton.CommandArgument
gesStr += addString
End Sub


Private Sub anzeige()
Dim gesArray As Array = Split(gesStr, ";")
For xLauf As Integer = 0 To UBound(gesArray) - 1
Dim anzLabel As New Label
anzLabel.Text = "<p>" & gesArray(xLauf) & "</p>"
tbPanel.Controls.Add(anzLabel)
Next




End Sub

End Class

问题:

按下按钮将显示postBack,但在第二次按下按钮之前,不会显示添加结果。所需的结果是,在第一次按下按钮后,sub在循环中显示正确的数组。

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

每次单击按钮时,您需要调用函数anzeige()并将gesStr值绑定到文本框控件。请参阅以下代码:

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

        If Page.IsPostBack Then
        Else
            gesStr = "1;"
        End If
        tb.Text = gesStr
        Dim iButton As New Button
        iButton.Text = "add"
        iButton.CommandArgument = "1;"
        iButton.CommandName = "1;"
        AddHandler iButton.Click, AddressOf add
        tbPanel.Controls.Add(iButton)

    End Sub

    Private Sub add(ByVal sender As Object, ByVal e As EventArgs)

        Dim myButton As Button = DirectCast(sender, Button)
        Dim addString As String = myButton.CommandArgument
        gesStr += addString

        anzeige()
    End Sub


    Private Sub anzeige()
        Dim gesArray As Array = Split(gesStr, ";")
        For xLauf As Integer = 0 To UBound(gesArray) - 1
            Dim anzLabel As New Label
            anzLabel.Text = "<p>" & gesArray(xLauf) & "</p>"
            tbPanel.Controls.Add(anzLabel)
        Next

        'Bind gesStr value to the textbox control
        tb.Text = gesStr

    End Sub