• 用户控件传值的问题研究


    尽管.NET的控件已经很多,但是自定义用户控件给我们提供了更为广阔的开发空间。合理的使用用户控件能给我们的开发带来很多好处和便捷。

    但是用户控件和普通的页面又有一些差别,如果使得用户控件与页面以及用户控件之间的通信,可能成为大家使用用户控件一个必须要思考的问题。当然,用户控件的设计的初衷应该是功能相对独立的单元,某一个用户控件完成特定的某种职能,但是在实际的应用中,经常需要这种用户控件之间的通信。

          举个例子:我们把上传文件的功能设计为一个用户控件,用户控件定义一切关于上传的文件格式的判断、动作、显示等。在页面调用的时候,我们直接拖入某一个页面,定义其属性。在这里要求,上传上来的文件形成一个文件列表显示出来,这个就需要用户控件和页面之间实现通信。

      最简单的方法:用Session将上传文件的值保存下来,然后在页面直接调用Session,当然这样做并非不可,但是会给你更新、清空这个Session而头疼。

      当然你可以使用get方法进行页面传值,但是这样的局限性就更大了,一个控件是为了更多代码来使用的,这样有悖于用户控件设计的出发点。

      我们可以通过反射解决这个问题,具体的代码实例: 

    在页面调用用户控件,用户控件的功能完成后,需要更新主页面。
    Page nPage
    = this.Parent.Page;//首先获得用户控件所在的页面对象
    Type pType = nPage.GetType();//获得该对象的类型
    MethodInfo nMethod = pType.GetMethod("BindData");

    //调用该类型下的某种方法,这里只提供了方法名。具体的方法,必须是public的无返回值的。
    nMethod.Invoke(nPage, null);触发执行。这样也就让页面重新加载。
    //nMethod.Invoke(p, new object[] { "参数1","参数2" });如果有参数

    
    

         如果是控件之间传值,可以使用下列方法:

    Page nPage = this.Parent.Page;
    UserControl uc
    = nPage.FindControl("TempletList1") as UserControl;//只是需要转换为用户控件类型
    Type pageType = uc.GetType();
    MethodInfo nMethod
    = pageType.GetMethod("BindData");
    nMethod.Invoke(uc,
    null);
    
    

  • 相关阅读:
    洛谷P1261 服务器储存信息问题
    洛谷P2110 欢总喊楼记
    洛谷P2482 [SDOI2010]猪国杀
    洛谷P2756 飞行员配对方案问题
    洛谷P2763 试题库问题
    洛谷P2774 方格取数问题
    Huffman编码
    SA后缀数组
    KMP
    LCA
  • 原文地址:https://www.cnblogs.com/yank/p/1315059.html
Copyright © 2020-2023  润新知