Asp.Net动态添加控件,并获取其值

来源:互联网 发布:最新网络传销公司名单 编辑:程序博客网 时间:2024/05/22 09:49

对于很多时候,我们在开发的时候,需要动态添加控件,包括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);//可以用方法对其赋值。。。具体实现省略。

          }
    }

 

 

 

其他:动态添加控件和事件

protected override void OnInit(EventArgs e)
        {
           
base.OnInit(e);
            CreatedRadio();
        }


private void CreatedRadio()
        {
RadioButton rad
= new RadioButton();
            rad.Text
= "Test";
           
rad.AutoPostBack
= true;           
            rad.CheckedChanged
+= new EventHandler(rad_CheckedChanged);
           
            phl.Controls.Add(rad);
        }

       
void rad_CheckedChanged(object sender, EventArgs e)
        {
            RadioButton rad
= sender as RadioButton;
           
if (rad != null)
            {
                Response.Write(rad.Checked);
            }
           
else
            {
                Response.Write(
"xx");
            }
        }

原创粉丝点击