今天做一个动态生成控件的功能 ,有两个方向一个是生成服务器控件,一个是生成html控件,生成html控件的话,可以用
CodePArtText.InnerHtml = "<div runat=\"server\" id=\"aa\"/>";
这个句话来写但是想在一个div生成两个发现不行,后来一试
hang1.InnerHtml = "<input type=\"textbox\" value=\"后台产生的文本框\" runat=\"server\" id=\"txt1\" name=\"txt1\" /><input type=\"textbox\" value=\"后台产生的文本框\" id=\"txt2\" name=\"txt1\" />";
可以这样子写hang1和CodePArtText是两个div的id。
考虑到取值不好取,决定用服务器控件
TextBox txtMytest = new TextBox(); txtMytest.Text = "我来测试下"; txtMytest.Width = 100; this.hang1.Controls.Add(txtMytest);
但是在生成后点击按钮一提交,服务器控件就不见了,从而用了这个方法
you need to remember to re-load the control upon postback public bool Loaded { get { object o = ViewState["Loaded"]; if (o == null) return false; else return (bool)o; } set { ViewState["Loaded"] = value;} } void LoadYourControl() { UC uc = LoadControl("uc.ascx"); PlaceHolder1.Controls.Add(uc); } AspxButton_Click() { LoadYourControl(); Loaded = true; } void Page_Load(object sender, EventArgs e) { if (Loaded) LoadYourControl(); } 很快解决了问题。博客地址:http://blog.csdn.net/lee576/article/details/2055236
3种办法:
第一种,就是在前台页面添加:
<div> <%
Response.Write("<input type=\"textbox\" value=\"后台产生的文本框\" id=\"txt1\" name=\"txt1\" />");
%> </div>
第二种,后台定义一个函数,前台调用:
projected voi show()
{
Response.Write("<input type=\"textbox\" value=\"后台产生的文本框\" id=\"txt1\" name=\"txt1\" />");
}
<div> <% show(); %> </div>
第三种,将客户端的元素用runat来申明:
<div runat="server" id="aa"></div>
后台:
projected void Page_Load()
{
aa.InnerHTML = "<input type=\"textbox\" value=\"后台产生的文本框\" id=\"txt1\" name=\"txt1\" />";
}