1. 程式人生 > >asp.net中使用者自定義控制元件呼叫另外一個使用者自定義控制元件中的方法

asp.net中使用者自定義控制元件呼叫另外一個使用者自定義控制元件中的方法

昨天同事問我一個問題,說是在一個頁面中有二個使用者自定義控制元件,他現在想在其中一個使用者自定義控制元件中呼叫另外一個使用者自定義控制元件的一個方法。
當時感覺很奇怪,為什麼要這樣呢。可是他說他要完成這樣一個功能,所以我就簡單的用一個反射的功能來完成它。試了一下,還行功能可以實現。現在把程式碼,放上來,供大家研究一下。(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.         <uc2:one ID="one1" runat="server" />
  13.         <uc3:two ID="two1" runat="server" />
  14.     </div>
  15.     </form>
  16. </body>
  17. </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. protectedvoid Page_Load(object sender, EventArgs e)
  12.         {
  13.         }
  14. //此處只是返回一個值。你可以根據你的需要加上一些別的方法。也可以在chen()這裡加入引數。如:chen(int i,string b)
  15. publicstring 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:TextBoxID="TextBox1"runat="server"></asp:TextBox>
  3. <asp:ButtonID="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. protectedvoid Page_Load(object sender, EventArgs e)
  12.         {
  13.         }
  14. protectedvoid Button1_Click(object sender, EventArgs e)
  15.         {
  16. //取得使用者控制元件的型別
  17.             Type t = Parent.Page.FindControl("two1").GetType();
  18. //取得使用者控制元件的資訊
  19.             System.Web.UI.Control u = Parent.Page.FindControl("two1");
  20. //得到使用者控制元件中要呼叫的方法
  21.             System.Reflection.MethodInfo m = t.GetMethod("chen");
  22. //如果你有引數要進行傳值,可以採用下面被註釋的方法,來進行傳值。如果沒有就相我一定直接定義一個就行了。
  23. //object[] obj = new object[1];
  24. //    obj[0] = "1";
  25. // this.TextBox1.Text = m.Invoke(u, obj).ToString();
  26. this.TextBox1.Text = m.Invoke(u, newobject[0]).ToString();
  27.         }
  28.     }
  29. }
如果你有更好的方法,可以給我留言。共同學習一下