很多ASP.NET 初学者对于在Web Form 动态建立控件的问题困扰,常见到的问题是为何动态建立的控件无法像拖曳到画面上的控件有一样的效果,例如无法加载ViewState 的数据 (无法呈现更新的值) 及动态控件事件处理等等问题。

以下这个范例就是说明如何在Web Form 上动态建立一个TextBox Button 控件,并处理Button Click 事件。

 1    Protected Sub Page_Init(ByVal sender As ObjectByVal e As System.EventArgs) Handles Me.Init
 2        Dim oTextBox As New TextBox()
 3        Dim oButton As New Button()
 4
 5        oTextBox.ID = "myTextBox"
 6        oTextBox.Text = "AAA"           'TextBox的初始值为 AAA
 7        Me.Form.Controls.Add(oTextBox)
 8
 9        oButton.ID = "myButton"
10        oButton.Text = "按钮"
11        Me.Form.Controls.Add(oButton)
12
13        '将 Button 的 Click 事件导向 Button_Click 函式
14        AddHandler oButton.Click, AddressOf Button_Click
15    End Sub

16
17
18    'Button 的 Click 事件导向函数
19    Protected Sub Button_Click(ByVal sender As ObjectByVal e As System.EventArgs)
20        Dim oTextBox As TextBox = Nothing
21        oTextBox = CType(Me.FindControl("myTextBox"), TextBox)
22        If oTextBox IsNot Nothing Then
23            oTextBox.Text = "BBB"
24        End If
25    End Sub

为何要在Init 事件中就动态建立控件,而不是在Load 事件中呢?主要的原因是Init 事件在LoadViewState 之前发生,而Load 事件是在LoadViewState 之后。你要在LoadViewState 之前就把控件准备好,机制才能由ViewState 中加载更新控件的属性值。





posted on 2008-05-07 10:39  jeff377  阅读(4422)  评论(1编辑  收藏  举报