Re: [問題] ASP.NET的使用者控制項呼叫aspx下的func

看板C_Sharp作者 (不放過自己)時間15年前 (2009/04/15 19:47), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串2/2 (看更多)
如果有一些Method想要讓ASP.NET Pages直接共用,那麼我會建議建立自己的Base Page Class。 並讓需要使用共用的Method的ASP.NET Pages繼承它。 當然,如果該Page上的Web User Control想要調用那些共用的Method也是有辦法的。 請參考以下程式碼大概的說明: 1. // 建立一個Base Page Class並且繼承 System.Web.UI.Page public class MyBasePage1 : System.Web.UI.Page { // 這是要共用的Method public void DoSomething() { } } 2. 修改ASP.NET Page使其改繼承自訂的Base Page Class, 由於自訂的類別又繼承自System.Web.UI.Page,所以對ASP.NET來說沒影響。 // 這是第一個ASP.NET Page,改繼承 MyBasePage1 public partial class _Default : MyBasePage1 { protected void Page_Load( object sender, EventArgs e ) { // 呼叫共用的Method DoSomething(); } } // 這是第二個ASP.NET Page,同樣改繼承 MyBasePage1 public partial class Default2 : MyBasePage1 { protected void Page_Load( object sender, EventArgs e ) { // 呼叫共用的Method DoSomething(); } } 因此,以上兩個ASP.NET Pages都能夠呼叫在MyBasePage1類別內的Method,達到共用目的。 3. Web User Control要調用MyBasePage1的Method // 這是一個 WebUserControl... public partial class WebUserControl1 : System.Web.UI.UserControl { protected void Page_Load( object sender, EventArgs e ) { // 取得所屬頁面的參照 MyBasePage1 parentPage = this.Page as MyBasePage1; // 呼叫該頁面上共用的Method parentPage.DoSomething(); } } 以上,希望不難理解。 其實Page與User Control在執行時期都只是一些類別物件而已,要讓它們能夠 達到相互認識,互通有無,還有不少方式,甚至有些是更有彈性的做法。 更彈性的做法,有一些是Design Pattern所提到的方式,就自己思考看看嚕。 另外提醒,上述做法,你可以不只擁有一個自訂的Base Page Class。 可依實務需求去切割成不同目的的Class。譬如說,管理者頁面專屬的Base Page Class。 又採上述做法的專案較大時,只有一層的Base Page Class,可能會稍嫌不足,那就可以再 拉出一層。 因為你原文提到要讓User Control去調用Page的Method,所以我提出上述方法。 以我的經驗而言,User Control不知道Page的細節是比較好的^^" 上述方式的原理同樣可以施於Web User Control,讓Page去設定Web User Control的自訂屬 性,或是調用Web User Control的Method。 ※ 引述《grassboy2 (活力花俏草兒仔政﹞O花俏)》之銘言: : ※ [本文轉錄自 Web_Design 看板] : 作者: grassboy2 (活力花俏草兒仔政﹞O花俏) 看板: Web_Design : 標題: [問題] ASP.NET的使用者控制項呼叫aspx下的function? : 時間: Wed Apr 15 05:19:58 2009 : 嗯嗯… : 最近開始接觸ascx這個玩意… : 話說我是用C#寫的… : 然後我在index.aspx.cs下,針對index.aspx的某個PlaceHolder : 讓他載入userControl.ascx這個使用者控制項… : 那…如果我在index.aspx.cs有一支function f() : 那…我有辦法在userControl.ascx.cs檔下面呼叫f()嗎? : 還是要把f()也copy到userControl.ascx.cs下@@a : (感覺這樣寫有點難維護的說>"<) -- 對於已經無法擁有的 唯一能做的是 不要忘記 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.224.212.65 ※ 編輯: petrushka 來自: 125.224.212.65 (04/15 19:55)

04/15 21:28, , 1F
如果method量很大 , 應該建立工具類別來進行比較好.
04/15 21:28, 1F

04/17 23:25, , 2F
會共用的話應該像樓上說的 把物件拉出來
04/17 23:25, 2F
文章代碼(AID): #19vSbAv_ (C_Sharp)
文章代碼(AID): #19vSbAv_ (C_Sharp)