2010-01-29 37 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中?那么你将不必重复任何代码。

相关问题