如何在用户控件中传递属性和方法(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 是放在页面中的。 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述