博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何在用户控件中传递属性和方法(Reflection)(转)
阅读量:4568 次
发布时间:2019-06-08

本文共 1718 字,大约阅读时间需要 5 分钟。

如何在用户控件中传递属性和方法?由于控件的执行在页面执行之后,因此常常是无法获取控件传递的值。如:上传文件控件,如果做成用户控件则在提交时无法获取上传的文件名,解决的方法是用反射机制(Reflection),定义用户控件的属性,用来传值,定义用户控件的方法,用来传递属性值到调用页面。

    页面Page中Page_Load:

//用 Reflection(反射机制)获取用户控件的类型.此处为:ucType = {Name = "usctrlupload_ascx" FullName = "ASP.usctrlupload_ascx"} usctrlupload_ascx 是用户控件名对应的名称,是从调试中复制。

        Type ucType = UsCtrlUpload1.GetType ();

        //用 PropertyInfo 获取用户控件中的属性.

        PropertyInfo UctextName= ucType.GetProperty("PicName");// PicName 是用户控件中的属性,定义如后附。

        //设置和获取用户控件中的值.

       UctextName.SetValue(UsCtrlUpload1,"123456",null );//用 PropertyInfo 实例的方法测试赋值。只是测试一下设置值的效果,主要的是下面如何获取控件的属性值。

        Label2.Text = UctextName.GetValue (UsCtrlUpload1,null ).ToString ();//UsCtrlUpload1用户控件 ID。

        //这样也可以获取和设置控件中的属性值.但好象不稳定,时行时不行的.

        Label2.Text = UsCtrlUpload1.PicName;

页面 Page 的 Button 事件中:

    protected void Button1_Click(object sender, EventArgs e)

    {

        Type ucType = UsCtrlUpload1.GetType();

        //用MethodInfo类来获取用户控件中的方法.

        MethodInfo UcMethod = ucType.GetMethod("Button1_Click");// Button1_Click控件中的方法。

        //在此处页面的方法中执行用户控件中的方法.

        object[] argumentArrray = new object[2];

        UcMethod.Invoke(UsCtrlUpload1, argumentArrray);//调用用户控件中的方法。此处执行了!!。

        PropertyInfo UctextName = ucType.GetProperty("PicName");

        Label2.Text = UctextName.GetValue(UsCtrlUpload1, null).ToString();//获取了上传的文件名信息。并显示在 page 页面上。

       

        //这样也可以获取和设置控件中的属性值.但好象不稳定,时行时不行的.

        //Label2.Text = UsCtrlUpload1.PicName;

    }

附:

用户控件.cs 文件中定义的属性:

    public string PicName

    {

        get { return Label2.Text; }

        set { Label2.Text = value; }

}

用户控件.cs 文件中定义的方法:

    public void Button1_Click(object sender, EventArgs e)

    {

        if (FileUpload1.HasFile)

        {

            Label2.Text = FileUpload1.PostedFile.FileName;

        }

注:此处借用了 Button 的事件方法,完全可以随意改。并且控件中没有 Button,Button 是放在页面中的。

转载于:https://www.cnblogs.com/panlijuan/archive/2011/10/12/2208326.html

你可能感兴趣的文章
js实现两种实用的排序算法——冒泡、快速排序
查看>>
PTA——03-树3 Tree Traversals Again(25 分)【java语言实现】
查看>>
STL Vector 的遍历删除
查看>>
处理器管理与进度调制
查看>>
libpng warning: iCCP: known incorrect sRGB profile
查看>>
【智力题】过桥问题和倒水问题
查看>>
UPenn - Robotics 1:Aerial Robotics - week 2:Geometry and Mechanics
查看>>
使用navigator.userAgent.toLowerCase()判断移动端类型
查看>>
REMODE+ORBSLAM运行配置(2) REMODE和编译后的ORB ros工程利用节点实现通讯
查看>>
C#的基本语法
查看>>
CCCC2017大区赛补完
查看>>
深度学习UFLDL老教程笔记1 稀疏自编码器Ⅱ
查看>>
Windows常用命令集
查看>>
luogu P2073 送花
查看>>
CPU占用率呈正弦实现,及实时输出进程和线程的CPU占用率
查看>>
java学习第八天
查看>>
判断是否有人在操作某张表,并获取…
查看>>
第四周仿真与计算作业
查看>>
.net中WebService的使用实例
查看>>
editplus的配色
查看>>