今天 Dotjum 的同事就問Dotjum 怎麼樣用 UserControl 去 Call Web Page 下的 Method ,
剛好 Dotjum 那時候在忙,就先請同事先去找答案,後來同事傳來給我,說在 MSDN FORUM 上
也有人再問關於WebControl的問題(前兩天問的),暫時還沒有解,Dotjum就趁開會的空檔來想一下,順便找一下答案,
在外國FORUM How can i to call a public method of page from user control? 這邊就有寫到處理的方法,
這邊 Dotjum 就用該篇說明的方法加上自己這邊的程式碼來做一個說明,話不多說,請看說明
Step 1. 首先要做到共用的方法先在 app_code 下面 建立一個 class 但這個 Class 是繼承 System.Web.UI.Page
並建立一個virtual method 允許在衍生類別中加以覆寫。
public class BasePage2 : System.Web.UI.Page { public BasePage2() { } //virtual 允許在衍生類別中加以覆寫。 public virtual string GetPageMethod() { return ""; } }
Step 2. 建立一個 WebPage 但改繼承對象為我們建立的 BasePage2
public partial class UserControlCallWebPageMethod_CalledPage2 : BasePage2 { protected void Page_Load(object sender, EventArgs e) { } public override string GetPageMethod() { return "aaa"; } }
Step 3.建立一個 User Control 把 UserControl 拉到 Web Page裡面, 在 UserControl .cs 程式中做現行this.Page型態的轉型即可讀到
Page 下的 Method
public partial class UserControlCallWebPageMethod_UserControlCallPageMethod2 : System.Web.UI.UserControl { protected void Page_Load(object sender, EventArgs e) { //本身的Page沒有 GetPageMethod 需要將目前的 this.Page 轉為BasePage2 BasePage2 page2 = (BasePage2)this.Page; Label1.Text = page2.GetPageMethod(); } }
就這樣三個步驟,跑一下你的網頁,就能讓 User Control 去Call Web Page 下的 Method ,很輕鬆簡單。
這邊 Dotjum 順便說明一下,因為本身 Dotjum 對OO就一直很想多瞭解,但學的很不精,所以有些觀念萬一是錯的,
要麻煩大家更正我一下,而這邊可以看到就 Thomas Sun – MSFT 回答的範例中,他建立的 Base Page 是 abstract
抽像 Class 及 抽像 Method ,所以衍生類必須要完全繼承及Override該方法,所以依照這個範例來說,
像 Dotjum 這樣用一般的 class 也是可以運行,當然有時我們會在 basePage 做其他的事情或共用給其他Page的方法
就不需要一開始設定為 abstract ,而且一般來說,如果你是在 Page 下的話,可以直接透過 base.方法名稱。
例如
public class BasePage2 : System.Web.UI.Page { public BasePage2() { } //virtual 允許在衍生類別中加以覆寫。 public virtual string GetPageMethod() { return ""; } public string Get123() { return "123"; } }
就能夠直接引用到 BasePage 下的方法及資料,所以這個範例中 Dotjum 就不使用 abstract 的方式,
當然 Dotjum 有可能有說錯的地方,在麻煩各位可以指導。
有趣嗎?下次在介紹有趣的給你知道。
attachment.zip
来源:https://www.cnblogs.com/tajum/archive/2007/11/13/958261.html