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


     

    如何在用户控件中传递属性和方法?由于控件的执行在页面执行之后,因此常常是无法获取控件传递的值。如:上传文件控件,如果做成用户控件则在提交时无法获取上传的文件名,解决的方法是用反射机制(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 是放在页面中的。

  • 相关阅读:
    BZOJ1045 [HAOI2008]糖果传递 && BZOJ3293 [Cqoi2011]分金币
    [BZOJ1103][POI2007]大都市meg dfs序+树状数组
    [BZOJ1122][POI2008]账本BBB 单调队列+后缀和
    [BZOJ1131][POI2008]Sta
    [BZOJ1370][Baltic2003]Gang团伙 并查集+拆点
    网易云基于 Kubernetes 的深度定制化实践
    微服务化的基石——持续集成
    微服务的接入层设计与动静资源隔离
    从互联网+角度看云计算的现状与未来(2)
    从互联网+角度看云计算的现状与未来(1)
  • 原文地址:https://www.cnblogs.com/ejiyuan/p/1289622.html
Copyright © 2020-2023  润新知