东南长平.宜福德.艺宝.中雷

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 512|回复: 0

如何在用户控件中传递属性和方法(Reflection)

[复制链接]

73

主题

74

帖子

247

积分

中级会员

Rank: 3Rank: 3

积分
247
Tryst丶影子 发表于 2018-2-16 16:30:54 | 显示全部楼层 |阅读模式
由于控件的执行在页面执行之后,因此常常是无法获取控件传递的值。如:上传文件控件,如果做成用户控件则在提交时无法获取上传的文件名,解决的方法是用反射机制(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 是放在页面中的。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|Archiver|手机版|小黑屋|Championly Tec. 站长统计

GMT+8, 2020-1-27 15:07 , Processed in 0.334623 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表