这个问题很多论坛问过很多遍了,可是目前好像没找到好的回答,很多人可能不是很理解才没有回答吧.这里我把问题详细说一下.
动态添加问题就是在页面后台代码中新建控件实例.
比如在Page_Load()中
TextBox TB=new TextBox();
Page.Controls.Add(TB);
但这样会返回TextBox控件必须在有runat = server 的标记窗体内的提示.对于这个问题,一直没有很好的回答,这里再次提出这个问题,但愿不要被淹掉. TextBox等控件不可以,但是如果是Label控件就可以了.因为TextBox可能是服务器控件吧.
动态添加控件意义很重大,希望有高手能解决.谢了.
另,最好是在空页面里动态添加控件,如果事先你在页面上放了其他控件,然后再在这个控件上动态添加控件的话,这个方法已经知道了.
Control.Attributes.Add("runat","server");的办法,貌似不管用啊.
Page.Controls.Add(TB);
---------------------------
这种添加方式,添加不到<form></form>中间去,而ASP.NET又要求,服务端控件必须放在<form></form>中间,于是就出现楼主所说的问题了.
解决问题的办法其实也简单,如下写法即可:TextBox TB=new TextBox();
Page.Controls[1].Controls.Add(TB);
this.TextBox1.Parent.Controls.Add(TB);
但是那个
Page.Controls[1].Controls.Add
中的1代表什么,页面中不是没有控件吗?
for each c in Page.controls
if typeof c is htmlform then exit for
next c
if c is nothing then
throw new("页面上没有form。")
else
c.controls.add(TB)
end if
--------------------------------------------------------------------------
这里假设Form总是装在Page.controls中的第二个位置。Page.controls中有好多控件的。你可以在“空页面”的page的load方法上设一个端点,然后用“监视”窗口输出页面的controls看看!