(转)向页面动态载入用户控件和自定义控件的方法(谨记)
2013-07-03 16:59
113 查看
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); //这时就将自定义控件动态的加入到了
}
所以当在使用的时候要根据需要载入的控件类型来选择正确的载入方式,否则就会出现很多问题,我本人很久以前也遇到过这些问题,后来解决了,但是过了很久之后又再次遇到这种问题时又忘记了以前是怎么解决的了,所以现在将它写出来,希望能帮助一些人。
动态载入用户控件的方法是,首先在页面中放上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); //这时就将自定义控件动态的加入到了
}
所以当在使用的时候要根据需要载入的控件类型来选择正确的载入方式,否则就会出现很多问题,我本人很久以前也遇到过这些问题,后来解决了,但是过了很久之后又再次遇到这种问题时又忘记了以前是怎么解决的了,所以现在将它写出来,希望能帮助一些人。
相关文章推荐
- 向页面动态载入用户控件和自定义控件的方法不同
- C# aspx页面动态加载ascx用户控件 及 利用反射调用其内方法
- 用反射方法使用户控件动态调用父页面的方法
- asp.net动态载入用户控件的方法
- asp.net动态载入用户控件的方法
- 用反射方法使用户控件动态调用父页面的方法
- web页面动态加载UserControl,并调用用户控件中的方法来初始化控件
- 用反射方法使用户控件动态调用父页面的方法
- 用反射方法使用户控件动态调用父页面的方法
- saucer(思归)解决的关于:页面A.aspx 动态载入用户自定义控件a.ascx,但a.ascx中的按钮提交后,不执行按钮的事件,而是直接刷新页面
- C# aspx页面动态加载ascx用户控件 及 利用反射调用其内方法
- 用反射方法使用户控件动态调用父页面的方法
- C# aspx页面动态加载ascx用户控件 及 利用反射调用其内方法
- 用反射方法使用户控件动态调用父页面的方法
- 用户控件动态调用父页面的方法
- 用反射方法使用户控件动态调用父页面的方法
- 关于ASP.NET同页面内【用户控件与父页面】以及【用户控件与用户控件】之间方法调用/传值 一点点经验
- 动态载入.ascx用户控件
- ASP.NET母版页中调用内容页的方法和web用户控件调用.aspx页面里的方法
- ASP.NET同页面内【用户控件与父页面】以及【用户控件与用户控件】之间方法