很多ASP.NET初學者對於在WebForm動態建立控制項的問題困擾,常見到的
問題是為何動態建立的控制項無法像拖曳到畫面上的控制項有一樣的效果
,例如無法載入 ViewState的資料(無法呈現更新的值)及動態控制項事件
處理等等問題。
以下這個範例就是說明如何在 Web Form 上動態建立一個 TextBox 及
Button 控制項,並處理 Button 的 Click 事件。
[技巧]可以增加HTML,設定DIV便可以自由放入位置
ASPX頁面:<div id="div1" runat="Server"></div>
ASPX.VB頁面:div1.Controls.Add(New LiteralControl(">br<"))
Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
Dim oTextBox As New TextBox()
Dim oButton As New Button()
oTextBox.ID = "myTextBox"
oTextBox.Text = "AAA" 'TextBox的初始值為 AAA
Me.Form.Controls.Add(oTextBox)
oButton.ID = "myButton"
oButton.Text = "按鈕"
Me.Form.Controls.Add(oButton)
'將 Button 的 Click 事件導向 Button_Click 函式
AddHandler oButton.Click, AddressOf Button_Click
End Sub
'Button 的 Click 事件導向函數
Protected Sub Button_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Dim oTextBox As TextBox = Nothing
oTextBox = CType(Me.FindControl("myTextBox"), TextBox)
If oTextBox IsNot Nothing Then
oTextBox.Text = "BBB"
End If
End Sub
為何要在 Init 事件中就動態建立控制項,而不是在 Load 事件中呢?主
要的原因是 Init 事件在 LoadViewState 之前發生,而 Load 事件是在
LoadViewState 之後。你要在 LoadViewState 之前就把控制項準備好,
機制才能由 ViewState 中載入更新控制項的屬性值。
轉載來源:http://www.dotblogs.com.tw/jeff377/archive/2008/03/17/1738.aspx
及http://blog.xuite.net/tooto/wretch/147662896-%28ASP.NET%29+%E5%8B%95%E6%85%8B%E6%96%B0%E5%A2%9E%E6%8E%A7%E5%88%B6%E9%A0%85+%28%E8%BD%89%E8%BC%89%29
0 留言