Asp.Net動態添加控制項,並擷取其值

來源:互聯網
上載者:User

對於很多時候,我們在開發的時候,需要動態添加控制項,包括Html控制項,Asp.Net 控制項。

js產生html控制項

function AddProperty()
{   
           var count = document.getElementById('hidCount').value;
            var str = "<BR> 屬性名稱:<input type=\"Text\" id=\"txtProperty"+count+"\" name=\"txtProperty"+count+"\" />&nbsp;&nbsp;屬性描述:<input type=\"Text\" id=\"txtDesc"+count+"\" name=\"txtDesc"+count+"\" />";
            count++;
            document.getElementById('hidCount').value=count;
            document.getElementById('catePro').innerHTML+=str;
}

 

因為要為產生的控制項要能取其值,所以,必須必須指定其ID,可以先在頁面放一個HiddenField控制項,並指定預設值為0;當動態添加控制項時,可以通過JS指令碼改變其值,指令碼如上。

<asp:HiddenField ID="hidCount" Value="0" runat="server" />

 

在頁面 後台,可以通過以下方式取其值,如下:

 int count = int.Parse(this.hidCount.Value);//取得產生控制項的個數,儲存在頁面的HiddenField中,並可以得知其ID

for (int i = 0; i < count; i++)
{
      string propName = string.Empty;
      string propDesc = string.Empty;                    
      if (!string.IsNullOrEmpty(Request["txtProperty" + i]))//判斷是否存在
      {
           PIM.Model.CateProperty model = new PIM.Model.CateProperty();
           propName = Request["txtProperty" + i].ToString();//,取得產生的控制項的值
           propDesc = Request["txtDesc" + i].ToString();                     

           //......                                        
       }
 }

 

二、動態產生Asp.Net伺服器控制項,並取其值

 

private void LoadProperty(int cateId)

HtmlGenericControl span = new HtmlGenericControl();
 for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{     

         StringBuilder strHtml = new StringBuilder();
         if (i % 2 == 0)
         {
              strHtml.Append("<div >");

              strHtml.Append("<div class=\"layout1\">");
         }
         else
         {                      
                        strHtml.Append("<div >");
          }                   

          TextBox txt = new TextBox();
          Label lbl = new Label();
          HiddenField hdf = new HiddenField();//
          lbl.ID = "lblProp" + i.ToString();
          lbl.Text = ds.Tables[0].Rows[i]["PropName"].ToString() + ":";
          txt.ID = "txtProp" + i.ToString();

          hdf.ID = "hdfProp" + i.ToString();//

          lbl.EnableViewState = true;
          txt.EnableViewState = true;
          hdf.EnableViewState = true;//

          LiteralControl lc = new LiteralControl(strHtml.ToString());

          lc.EnableViewState = true;

          span.Controls.Add(lc);
          span.Controls.Add(lbl);
          span.Controls.Add(txt);
          span.Controls.Add(hdf);//                   
          if (i % 2 == 0)
          {
                span.Controls.Add(new LiteralControl("</div></div>"));
          }
          else
           {
                 span.Controls.Add(new LiteralControl("</div>"));
           }       
}

 }

動態產生的控制項,當點擊頁面按鈕時會重新整理頁面,所以,產生控制項的方法不需要

if(!IsPostBack)

{

}

 

如果在PageLoad方法中,即使每回都動態載入都無法得到其資料,且動態產生的控制項會消失,所以,根據Asp.Net生命週期,我們將產生控制項在OnInit()方法中,

即重寫此方法

  protected override void OnInit(EventArgs e)
{

 LoadProperty(cateID);//在OnInit中執行動態添加控制項的方法,這樣就會儲存其狀態視圖

 }

如果這些動態產生的控制項,在產生的時候,就需要從資料庫中取值,並為其賦值,可以在PageLoad中進行賦值操作,

這時就可以使用(!IsPostBack),且不會丟失其值。

 protected void Page_Load(object sender, EventArgs e)
{

       if (!IsPostBack)
      {
             if (!string.IsNullOrEmpty(Request["productId"]))
            {
                string productId = Request["productId"].ToString();
                int parentId = int.Parse(ParentID);

                LoadData(productId, parentId);//可以用方法對其賦值。。。具體實現省略。

          }
    }

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.