这几天开发项目时我遇到一个问题:在一个页面中有二个用户自定义控件,现在想在其中一个用户自定义控件中调用另外一个用户自定义控件的一个方法。 当时感觉很奇怪,为什么要这样呢。可是他说他要完成这样一个功能,所以我就简单的用一个反射的功能来完成它。试了一下,还行功能可以实现。现在把代码,放上来,供大家研究一下。(vs2008英文版上运行正常) 一,WebForm3.aspx(主要是用来加载二个用户控件的) 以下是引用片段: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm3.aspx.cs" Inherits="WebApplication1.WebForm3" %> <%@ Register src="one.ascx" tagname="one" tagprefix="uc2" %> <%@ Register src="two.ascx" tagname="two" tagprefix="uc3" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div> <uc2:one ID="one1" runat="server" /> <uc3:two ID="two1" runat="server" /> </div> </form> </body> </html> | 二,被调用方法的用户自定义控件(two.ascx) 以下是引用片段: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace WebApplication1 { public partial class two : System.Web.UI.UserControl { protected void Page_Load(object sender, EventArgs e) { } //此处只是返回一个值。你可以根据你的需要加上一些别的方法。也可以在chen()这里加入参数。如:chen(int i,string b) public string chen() { return "chen"; } } } | 三,调用用户控件方法的用户控件页面one.ascx 前台:就是加一个文本框,和一个按钮,把two.ascs中的值传过来 后台: <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="one.ascx.cs" Inherits="WebApplication1.one" %> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" /> | -
以下是引用片段: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace WebApplication1 { public partial class one : System.Web.UI.UserControl { protected void Page_Load(object sender, EventArgs e) { } protected void Button1_Click(object sender, EventArgs e) { //取得用户控件的类型 Type t = Parent.Page.FindControl("two1").GetType(); //取得用户控件的信息 System.Web.UI.Control u = Parent.Page.FindControl("two1"); //得到用户控件中要调用的方法 System.Reflection.MethodInfo m = t.GetMethod("chen"); //如果你有参数要进行传值,可以采用下面被注释的方法,来进行传值。如果没有就相我一定直接定义一个就行了。 //object[] obj = new object[1]; // obj[0] = "1"; // this.TextBox1.Text = m.Invoke(u, obj).ToString(); this.TextBox1.Text = m.Invoke(u, new object[0]).ToString(); } } } | (责任编辑:admin) |