[英]Add ASP.NET controls dynamically to a web page
我是Web開發的新手,我的目標是添加標簽和文本框控件,或動態下拉至頁面,而無需重新編程頁面和重新發布應用程序。 例如,通過管理模塊,我可以在應用程序的輸入頁面中添加或刪除字段。 例如,此輸入頁面將具有4個字段,但是一項新要求要求我添加第5個字段,它是下拉列表,帶有相關文本框的標簽,復選框等。
我已經在Google上搜索並找到此鏈接: 動態添加ASP.Net控件 ,這是一個開始。
從我發現的結果看來,我需要通過一個應用程序函數(例如)來生成它。 CreateTextBoxControl(....),並在頁面上使用占位符或其他方式。
我的首選是使用帶有SQL Server存儲過程的Restful WEB API的MVC。
我將繼續對此進行研究,但是任何幫助將不勝感激。
謝謝。
創建動態控件並進行連接
在.cs(隱藏代碼)文件中聲明TextBox控件。 另外,為.aspx文件中的現有表單元素聲明一個變量。 在WebForm1類的聲明之后更新聲明:
公共類WebForm1:System.Web.UI.Page {受保護的System.Web.UI.WebControls.Label Label1; 受保護的System.Web.UI.WebControls.Label Label2; 受保護的System.Web.UI.WebControls.Label Label3; 受保護的System.Web.UI.WebControls.Label Label4; 受保護的System.Web.UI.WebControls.Button Button1;
//手動添加以訪問表格。 受保護的System.Web.UI.HtmlControls.HtmlForm Form1;
//手動添加; 將在OnInit中創建實例。 受保護的System.Web.UI.WebControls.TextBox TextBox1; 受保護的System.Web.UI.WebControls.TextBox TextBox2;
手動輸入TextBox聲明,就像將TextBox從工具箱拖動到.aspx頁時一樣。 但是,在這種情況下,您可以動態創建控件。
找到OnInit函數。 展開標有“ Web窗體設計器生成的代碼”注釋的代碼。 修改OnInit函數,使其看起來類似於以下代碼:
override protected void OnInit(EventArgs e)
{
// Create dynamic controls here.
// Use "using System.Web.UI.WebControls;"
TextBox1 = new TextBox();
TextBox1.ID = "TextBox1";
TextBox1.Style["Position"] = "Absolute";
TextBox1.Style["Top"] = "25px";
TextBox1.Style["Left"] = "100px";
Form1.Controls.Add(TextBox1);
TextBox2 = new TextBox();
TextBox2.ID = "TextBox2";
TextBox2.Style["Position"] = "Absolute";
TextBox2.Style["Top"] = "60px";
TextBox2.Style["Left"] = "100px";
Form1.Controls.Add(TextBox2);
this.TextBox1.TextChanged += new System.EventHandler(this.TextBox_TextChanged);
this.TextBox2.TextChanged += new System.EventHandler(this.TextBox_TextChanged);
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}
此代碼動態創建兩個TextBox控件,設置它們的ID和位置,然后將它們綁定到Form Controls集合。 該代碼還將文本框的TextChanged事件連接到處理程序(TextBox_TextChanged)。
除了以編程方式設置TextBox位置並將其綁定到Form Controls集合之外,還可以將Web Forms Panel控件添加到.aspx頁,並將文本框綁定到OnInit函數中的文本框,類似於以下操作:
TextBox1 = new TextBox();
TextBox1.ID = "TextBox1";
//Form1.Controls.Add(TextBox1);
Panel1.Controls.Add(TextBox1);
注意當您在Web窗體上創建動態控件時,必須在OnInit或Page_Load事件中創建控件並將其添加到控件集合中。 否則,控件的行為會異常。
初始化文本框的文本屬性和樣式。 修改現有的Page_Load函數,如下所示:
私人無效Page_Load(object sender,System.EventArgs e){if(!IsPostBack){//設置文本框的初始屬性。 TextBox1.Text =“ TextBox1”; TextBox2.Text =“ TextBox2”; }}
文本框的初始值(if(!IsPostBack))設置一次。 該信息由IPostBackDataHandler接口用於文本框維護,因此不必為后續帖子重置值。
提供用於TextBox控件的TextChanged事件的處理程序。 在Page_Load函數主體之后添加以下代碼:
私人無效TextBox_TextChanged(object sender,System.EventArgs e){TextBox txtBoxSender =(TextBox)sender; 字符串strTextBoxID = txtBoxSender.ID;
switch(strTextBoxID) { case "TextBox1": Label3.Text = "TextBox1 text was changed"; break; case "TextBox2": Label4.Text = "TextBox2 text was changed"; break; }
}
此代碼檢查以查看哪個控件觸發了事件,然后使用適當的Label控件將此事件報告給用戶。 請注意,此函數處理兩個動態創建的TextBox控件的TextChanged事件。 默認情況下,對於TextBox控件,AutoPostBack為false。 因此,更改控件中的文本不會導致回發到服務器。 但是,當單擊Submit按鈕將表單發布到服務器時,將觸發TextBox控件的TextChanged事件,並調用此函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.