zoukankan      html  css  js  c++  java
  • Asp.Net动态添加控件,并获取其值

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

              }
        }

  • 相关阅读:
    Properties读取资源文件的四种方法
    如何成为一个C++高级程序员
    Linux定时任务设定
    Mysql之复制选项与监控
    GTID复制之二
    Mysql之多源复制
    MysqlDumpslow
    用Mysqlbinlog备份BinLog文件
    Mysql之mysqlbinlog使用
    Mysql之取消主从复制
  • 原文地址:https://www.cnblogs.com/vihone/p/1640025.html
Copyright © 2011-2022 走看看