如何在ASP.NET中动态添加自定义服务器WEB组件?

时间:2022-08-30 19:39:36
我现在的办法是定义一个函数,在这个函数中为使用page.control.add添加这个组件,之所以不直接在ASPX文件中直接定义,是因为添加多少个组件需要从数据库读取个数,并且为组件赋予必要的值,但是现在的问题是,这个ASPX文件中还有其他的控件,如txt,downdroplist,button,我希望加入的自定义组件在这些控件的前面,但是我把该函数写在page_load中,运行后的aspx文件中,依然在以上控件的后面,如果把txt,downlist,button等控件也动态加入的话,又有错误提示,button控件必须要加runat=server。
请问有什么办法可以解决这个问题:即根据数据库动态添加多个自定义服务器WEB控件,而且能够根据数据库赋值。最重要的是,必须在aspx文件中定义的控件之前。

试过在aspx文件中直接<%=函数%>或者<%#函数%>都不能解决。

10 个解决方案

#1


你是要添加自定义控件还是用户控件?这两个概念不同。
而你的自定义组件是什么?但从你的page.control.add看好像是自定义控件了。

#2


是自定义控件,主要是根据赋值,显示不同的表格。

#3


在PageLoad里代码如下 
for (int i = 0; i  < GridView1.Rows.Count; i++) 

      TextBox txt = new TextBox(); 
      txt.ID = "txt" + i; 
      GridView1.Rows[i].Cells[7].Controls.Add(txt); 


在一个按钮的点击事件中 
for (int i = 0; i  < GridView1.Rows.Count; i++) 

     Control controlText = GridView1.Rows[i].Cells[7].FindControl("txt" + i); 


特别注意:

动态添加控件的代码不可放到非IsPostBack里,对动态添加的控件,无论是否IsPostBack都要执行才可以。
比如: 

Page_Load() 

   if (!this.IsPostBack) 
   { 

   } 
   this.addControls(); 
}

#4


this.FindControl来获取看看呢

#5


郁闷,我说的不够清楚吗?
我能够添加自定义控件,现在要求的是动态添加的自定义WEB服务器控件位置在ASPX中设置的控件前面

#6


luguo 

#7


不知道你要添加的是服务器端的还是客户端的组件?
服务器端的话必须要放在Form表单里面,客户端则通过js添加

#8


你在这些控件前面放一个Div,在其中放置一个Panael试一下,如果没有控件可加载,就把div隐藏掉。

#9


<asp:Panel id="Panel1" runat="server" visible="false"
<asp:PlaceHolder id="PlaceHolder1" runat="server" visible="true"
<Div id="div1" runat="server" visible="false"
<Span id="span 1" runat="server" visible="false"

如 8 楼,用 C# 控制,以上四个容器 tag 或控件,哪个要显示、哪个要隐藏,
visible="true" or "false"
把 Custom Control 放在这四种容器的其中一种。

#10


protected void Page_Load(object sender, EventArgs e)
{
    Button btn1 = new Button();
    btn1.ID = "myBtn1";
    
    PlaceHolder1.Controls.Add(btn1);
}

#1


你是要添加自定义控件还是用户控件?这两个概念不同。
而你的自定义组件是什么?但从你的page.control.add看好像是自定义控件了。

#2


是自定义控件,主要是根据赋值,显示不同的表格。

#3


在PageLoad里代码如下 
for (int i = 0; i  < GridView1.Rows.Count; i++) 

      TextBox txt = new TextBox(); 
      txt.ID = "txt" + i; 
      GridView1.Rows[i].Cells[7].Controls.Add(txt); 


在一个按钮的点击事件中 
for (int i = 0; i  < GridView1.Rows.Count; i++) 

     Control controlText = GridView1.Rows[i].Cells[7].FindControl("txt" + i); 


特别注意:

动态添加控件的代码不可放到非IsPostBack里,对动态添加的控件,无论是否IsPostBack都要执行才可以。
比如: 

Page_Load() 

   if (!this.IsPostBack) 
   { 

   } 
   this.addControls(); 
}

#4


this.FindControl来获取看看呢

#5


郁闷,我说的不够清楚吗?
我能够添加自定义控件,现在要求的是动态添加的自定义WEB服务器控件位置在ASPX中设置的控件前面

#6


luguo 

#7


不知道你要添加的是服务器端的还是客户端的组件?
服务器端的话必须要放在Form表单里面,客户端则通过js添加

#8


你在这些控件前面放一个Div,在其中放置一个Panael试一下,如果没有控件可加载,就把div隐藏掉。

#9


<asp:Panel id="Panel1" runat="server" visible="false"
<asp:PlaceHolder id="PlaceHolder1" runat="server" visible="true"
<Div id="div1" runat="server" visible="false"
<Span id="span 1" runat="server" visible="false"

如 8 楼,用 C# 控制,以上四个容器 tag 或控件,哪个要显示、哪个要隐藏,
visible="true" or "false"
把 Custom Control 放在这四种容器的其中一种。

#10


protected void Page_Load(object sender, EventArgs e)
{
    Button btn1 = new Button();
    btn1.ID = "myBtn1";
    
    PlaceHolder1.Controls.Add(btn1);
}