zoukankan      html  css  js  c++  java
  • (转)向页面动态载入用户控件和自定义控件的方法(谨记)

    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); //这时就将自定义控件动态的加入到了
    }

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

  • 相关阅读:
    学习redis-安装和基本一些命令
    Eclipse启动报错Java was started but returned exit code=13
    踩过的坑系列之InputStream.read(byte[])方法
    <<深入Java虚拟机>>-虚拟机类加载机制-学习笔记
    <<深入Java虚拟机>>-第三章-垃圾收集器与内存分配策略-学习笔记
    <<深入Java虚拟机>>-第二章-Java内存区域-学习笔记
    创建线程的两种方式比较Thread VS Runnable
    Java设计模式之--代理模式学习
    shell脚本中$参数的介绍
    (转)使用DataTime这个类来获取当前的时间
  • 原文地址:https://www.cnblogs.com/wenghaowen/p/3169856.html
Copyright © 2011-2022 走看看