动态生成控件的功能

今天做一个动态生成控件的功能 ,有两个方向一个是生成服务器控件,一个是生成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\" />";

}

原文地址:https://www.cnblogs.com/VicHuang/p/2440744.html