我的网站有一个母版网站Site.master。 Site.master的许多内容页面都有相同的按钮,每个页面的功能相同:
<asp:ImageButton ID="btn" runat="server" OnClick="btn_Click" />
是否可以在Site.master的CodeFile中编写btn_Click
一次,并在每个内容页面的按钮的OnClick属性中调用它?我试图避免向每个内容页面的CodeFile添加相同的功能(或任何内容)。
谢谢!
答案 0 :(得分:3)
这是可行的,但作为一种最佳实践,如果您只是有意识地选择尽可能多地保留主页中的功能,那么您将为自己省去很多心痛。保留它们仅用于演示和演示。使用基页类和用户控件在页面级别执行操作可能会更好(特别是如果它是通用操作)
答案 1 :(得分:2)
如果按钮非常相似,您可以将它们放入母版页(或SubMaster页面)。
否则,使用MasterType,您可以强类型Page.Master属性。 可以连接按钮,如:
<asp:ImageButton ID="btn" runat="server" OnClick="Master.btn_Click" />
如果没有,您可以让Master搜索具有已知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;
}
答案 2 :(得分:1)
你可以,但它不漂亮。更好的方法是使您的内容页面从一个继承自Page的公共基类派生。在那里,您可以放置所有页面共有的代码。
答案 3 :(得分:1)
如果每个页面上都有按钮,是否有理由不将按钮实际放在主页中?
如果无法做到这一点,我建议您创建一个新的类文件(例如FooButtonBehavior
),然后将您的按钮处理程序放在该类中(例如OnFooClicked()
)。然后在每个类的代码隐藏中,只需新建一个FooButtonBehavior
的实例并调用OnFooClicked()
。如果你需要传入任何在页面上被操纵的控件,你也可以这样做。
答案 4 :(得分:1)
为什么不将ImageButton和它的点击处理程序封装到UserControl中?然后你不必重复任何代码。