很多 ASP.NET 初學者對於在 Web Form 動態建立控制項的問題困擾,常見到的問題是為何動態建立的控制項無法像拖曳到畫面上的控制項有一樣的效果,例如無法載入 ViewState 的資料 (無法呈現更新的值) 及動態控制項事件處理等等問題。
以下這個範例就是說明如何在 Web Form 上動態建立一個 TextBox 及 Button 控制項,並且加入處理 Button 的 Click 事件。
protected void Page_Init(object sender, EventArgs e){
TextBox oTextBox = new TextBox();
Button oButton = new Button();
this.Form.Controls.Add(oTextBox); // 先把元件加入 Controls 裡
oTextBox.ID = "myTextBox";
oTextBox.Text = "AAA"; // TextBox的初始值為 AAA
this.Form.Controls.Add(oButton);
oButton.ID = "myButton";
oButton.Text = "按鈕";
// 將 Button 的 Click 事件導向 Button_Click 函式
oButton.Click += new System.EventHandler(this.Button_Click);
}
// Button 的 Click 事件導向函數
protected void Button_Click(object sender, EventArgs e)
{
TextBox oTextBox = (TextBox)this.FindControl("myTextBox");
if (oTextBox != null)
oTextBox.Text = "BBB";
}
為何要在 Init 事件中就動態建立控制項,而不是在 Load 事件中呢?主要的原因是 Init 事件在 LoadViewState 之前發生,而 Load 事件是在 LoadViewState 之後。你要在 LoadViewState 之前就把控制項準備好,機制才能由 ViewState 中載入更新控制項的屬性值。
全站熱搜