(转)向页面动态载入用户控件和自定义控件的方法(谨记)

ASP.NET Web Froms中有两种控件类型“用户控件”和“自定义控件”这两种控件都可以通过拖拽放到页面上,所以经常会忽略它们之间的不同,其实它们之间有很多地方不同,这里我说一下当我们需要动态的在页面上加入这两种控件的方法的不同吧.。


动态载入用户控件的方法是,首先在页面中放上Placehold,然后在后台代码中new 自定义控件的类,然后调用placehold的Controlls.Add方法,将这个自定义控件加入进去。代码如下:

Show.aspx页 <asp:placehold id="placehold1" runat="server" />

Show.aspx.cs代码

proteted void Page_Load(obje.....){

Label control = new Label();//这里可以将Label换成任何自定义控件。

placehold.Controls.Add(control); //这时就将自定义控件动态的加入到了

}


 
当动态载入自定义控件的时候使用上面的方法就行不通了,如果使用上面的方法,那么用户控件无法初始化它内部的子控件,这因为生命周期的原因,用户控件的生命周期依赖于当前页面的生命周期,所以当需要动态的载入它时需要使用另一种方式来进行。Page类提供了一个动态载入用户控件的方法LoadControl这个方法有两个重载,一个接受一个STRING的参数,可以传递用户控件的相对路径,格式可以写成~/xxxx.ascx,第二个重载接受类型信息,也就是说可以登陆类名来在程序集中查找并载入,当将这个用户控件载入到页面中后,该用户控件并不会马上执行,这点就和上面的那种方法不同了,它会在PAGE的生命周期中对控件树进行初始化时才开始执行。下面是演示的代码:

Show.aspx页 <asp:placehold id="placehold1" runat="server" />

Show.aspx.cs代码
proteted void Page_Load(obje.....){
MyUserControl control = Page.LoadControl("~/MyUserControl.ascx"); //或是使用类名
// MyUserControl control = Page.LoadControl(typeof(MyAppliction.MyUserControl));
placehold.Controls.Add(control); //这时就将自定义控件动态的加入到了
}

  
所以当在使用的时候要根据需要载入的控件类型来选择正确的载入方式,否则就会出现很多问题,我本人很久以前也遇到过这些问题,后来解决了,但是过了很久之后又再次遇到这种问题时又忘记了以前是怎么解决的了,所以现在将它写出来,希望能帮助一些人。

原文地址:https://www.cnblogs.com/wenghaowen/p/3169856.html