asp.net中用户自定义控件调用另外一个用户自定义控件中的方法

时间:2022-09-08 00:09:34
昨天同事问我一个问题,说是在一个页面中有二个用户自定义控件,他现在想在其中一个用户自定义控件中调用另外一个用户自定义控件的一个方法。
当时感觉很奇怪,为什么要这样呢。可是他说他要完成这样一个功能,所以我就简单的用一个反射的功能来完成它。试了一下,还行功能可以实现。现在把代码,放上来,供大家研究一下。(vs2008英文版上运行正常)
一,WebForm3.aspx(主要是用来加载二个用户控件的)
  1. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm3.aspx.cs" Inherits="WebApplication1.WebForm3" %>
  2. <%@ Register src="one.ascx" tagname="one" tagprefix="uc2" %>
  3. <%@ Register src="two.ascx" tagname="two" tagprefix="uc3" %>
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  5. <html xmlns="http://www.w3.org/1999/xhtml" >
  6. <head runat="server">
  7.     <title></title>
  8. </head>
  9. <body>
  10.     <form id="form1" runat="server">
  11.     <div>
  12.     
  13.         <uc2:one ID="one1" runat="server" />
  14.         <uc3:two ID="two1" runat="server" />
  15.     
  16.     </div>
  17.     </form>
  18. </body>
  19. </html>

二,被调用方法的用户自定义控件(two.ascx)
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.UI;
  6. using System.Web.UI.WebControls;
  7. namespace WebApplication1
  8. {
  9.     public partial class two : System.Web.UI.UserControl
  10.     {
  11.         protected void Page_Load(object sender, EventArgs e)
  12.         {
  13.         }
  14.         //此处只是返回一个值。你可以根据你的需要加上一些别的方法。也可以在chen()这里加入参数。如:chen(int i,string b)
  15.         public string chen()
  16.         {
  17.             return "chen";
  18.         }
  19.     }
  20. }
三,调用用户控件方法的用户控件页面one.ascx
前台:就是加一个文本框,和一个按钮,把two.ascs中的值传过来
  1. <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="one.ascx.cs" Inherits="WebApplication1.one" %>
  2. <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
  3. <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
后台:
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.UI;
  6. using System.Web.UI.WebControls;
  7. namespace WebApplication1
  8. {
  9.     public partial class one : System.Web.UI.UserControl
  10.     {
  11.         protected void Page_Load(object sender, EventArgs e)
  12.         {
  13.         }
  14.         
  15.         protected void Button1_Click(object sender, EventArgs e)
  16.         {
  17.             //取得用户控件的类型
  18.             Type t = Parent.Page.FindControl("two1").GetType();
  19.             //取得用户控件的信息
  20.             System.Web.UI.Control u = Parent.Page.FindControl("two1");
  21.             //得到用户控件中要调用的方法
  22.             System.Reflection.MethodInfo m = t.GetMethod("chen");
  23.             //如果你有参数要进行传值,可以采用下面被注释的方法,来进行传值。如果没有就相我一定直接定义一个就行了。
  24.             //object[] obj = new object[1];
  25.             //    obj[0] = "1";
  26.             // this.TextBox1.Text = m.Invoke(u, obj).ToString();
  27.             this.TextBox1.Text = m.Invoke(u, new object[0]).ToString();
  28.         }
  29.     }
  30. }
如果你有更好的方法,可以给我留言。共同学习一下