当时感觉很奇怪,为什么要这样呢。可是他说他要完成这样一个功能,所以我就简单的用一个反射的功能来完成它。试了一下,还行功能可以实现。现在把代码,放上来,供大家研究一下。(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";
- }
- }
- }
前台:就是加一个文本框,和一个按钮,把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();
- }
- }
- }