对于很多时候,我们在开发的时候,需要动态添加控件,包括Html控件,Asp.Net 控件。 js生成html控件 function AddProperty() 因为要为生成的控件要能取其值,所以,必须必须指定其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++) //...... 二、动态生成Asp.Net服务器控件,并取其值 private void LoadProperty(int cateId) { HtmlGenericControl span = new HtmlGenericControl(); StringBuilder strHtml = new StringBuilder(); strHtml.Append("<div class=\"layout1\">"); TextBox txt = new TextBox(); hdf.ID = "hdfProp" + i.ToString();// lbl.EnableViewState = true; LiteralControl lc = new LiteralControl(strHtml.ToString()); lc.EnableViewState = true; span.Controls.Add(lc); } 动态生成的控件,当点击页面按钮时会刷新页面,所以,生成控件的方法不需要 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) LoadData(productId, parentId);//可以用方法对其赋值。。。具体实现省略。 } } 其他:动态添加控件和事件 protected override void OnInit(EventArgs e) void rad_CheckedChanged(object sender, EventArgs e) |
如果要记隹你的某些动作,可以把操作记录到。
ViewState.Add("ctype", lb.CommandArgument.ToString());
ViewState.Add("lb_id", lb.ID);
ViewState.Add("ctype", ((LinkButton)_ctl).CommandArgument.ToString());