2010-01-29 53 views
1

我有一個網站,主頁面Site.master。許多的Site.Master內容頁都具有相同的按鈕,其功能在每一頁上以同樣的方式:ASP.NET - 內容頁面可以在其母版頁中調用一個函數嗎?

<asp:ImageButton ID="btn" runat="server" OnClick="btn_Click" />

是否有可能在的Site.Master的的CodeFile寫btn_Click一次,有它調用的onclick屬性每個內容頁面的按鈕?我試圖避免爲每個內容頁面的CodeFile添加相同的功能(或任何其他功能)。

謝謝!

+0

按鈕有什麼作用?它依賴於每個內容頁面嗎? – ryanulit 2010-01-29 21:54:21

+0

按鈕功能獨立於實際頁面的內容,並且不會出現在從主控制器派生的每個頁面上。 感謝迄今爲止的迴應,我會看看我能想出什麼。 – ovinophile 2010-01-29 22:18:32

回答

2

如果按鈕幾乎完全相同,則可以將它們放入主頁面(或SubMaster頁面)。

否則,使用MasterType可強鍵入Page.Master屬性。它可能有可能要連接一個按鈕,如:

<asp:ImageButton ID="btn" runat="server" OnClick="Master.btn_Click" /> 

如果沒有,你可以有一個控制主數據搜索與已知的ID,並把它掛起來。

public string ButtonId { get; set; } 

override OnLoad(EventArgs e) { 
    var b = Page.FindControl(this.ButtonId ?? "btn") as Button; 
    if (b != null) b.Click += this.On_Click; 
} 
+0

我很確定我以前沒有成功地嘗試過使用MasterType,但是再次嘗試了它並且它工作正常。當然這不是最好的做法,但它在一個緊要關頭。謝謝! – ovinophile 2010-02-02 19:52:33

1

你可以,但它不漂亮。更好的方法是讓你的內容頁面從一個從頁面繼承的公共基類中派生。在那裏你可以放置所有頁面通用的代碼。

3

這是可行的,但作爲最佳做法,就能爲您節省了大量的心痛,如果你只是有意識地選擇,以保持儘可能多的功能,你的母版頁儘可能的。僅爲演示和演示預留它們。您可能會更好地使用基本頁面類和用戶控件在頁面級別執行操作(特別是如果它是通用操作)

+0

我正要爲此建議用戶控件。 – 2010-01-29 22:07:29

1

如果按鈕位於每個頁面上,是否有某種原因不實際放置按鈕師父?

如果這是不可能的,我會建議創建一個新的類文件(例如,FooButtonBehavior),然後將該按鈕處理程序放入該類(例如,OnFooClicked())。然後在你的代碼後面,每個類只需新建一個FooButtonBehavior的實例,並調用OnFooClicked()。如果您需要傳入在頁面上操作的任何控件,您也可以這樣做。

1

爲什麼不將ImageButton和它的Click處理程序封裝到UserControl中?那麼你將不必重複任何代碼。

相關問題