簡體   English   中英

動態將ASP.NET控件添加到網頁

[英]Add ASP.NET controls dynamically to a web page

我是Web開發的新手,我的目標是添加標簽和文本框控件,或動態下拉至頁面,而無需重新編程頁面和重新發布應用程序。 例如,通過管理模塊,我可以在應用程序的輸入頁面中添加或刪除字段。 例如,此輸入頁面將具有4個字段,但是一項新要求要求我添加第5個字段,它是下拉列表,帶有相關文本框的標簽,復選框等。

我已經在Google上搜索並找到此鏈接: 動態添加ASP.Net控件 ,這是一個開始。

從我發現的結果看來,我需要通過一個應用程序函數(例如)來生成它。 CreateTextBoxControl(....),並在頁面上使用占位符或其他方式。

我的首選是使用帶有SQL Server存儲過程的Restful WEB API的MVC。

我將繼續對此進行研究,但是任何幫助將不勝感激。

謝謝。

創建動態控件並進行連接

  1. 在解決方案資源管理器中,單擊“顯示所有文件”以顯示與WebForm1.aspx關聯的文件的列表。 打開WebForm1.aspx.cs文件。
  2. 在.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頁時一樣。 但是,在這種情況下,您可以動態創建控件。

  1. 添加代碼以動態創建TextBox控件。 每次頁面運行時都會創建控件。 最佳方法是在WebForm1類提供的OnInit函數中。

找到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事件中創建控件並將其添加到控件集合中。 否則,控件的行為會異常。

  1. 初始化文本框的文本屬性和樣式。 修改現有的Page_Load函數,如下所示:

    私人無效Page_Load(object sender,System.EventArgs e){if(!IsPostBack){//設置文本框的初始屬性。 TextBox1.Text =“ TextBox1”; TextBox2.Text =“ TextBox2”; }}

文本框的初始值(if(!IsPostBack))設置一次。 該信息由IPostBackDataHandler接口用於文本框維護,因此不必為后續帖子重置值。

  1. 提供用於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事件,並調用此函數。

https://support.microsoft.com/zh-CN/help/317794/how-to-dynamically-create-controls-in-asp-net-by-using-visual-c-net

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM