ASP.NET - 内容页面可以在其母版页中调用函数吗?

时间:2010-01-29 21:45:48

标签: asp.net function master-pages

我的网站有一个母版网站Site.master。 Site.master的许多内容页面都有相同的按钮,每个页面的功能相同:

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

是否可以在Site.master的CodeFile中编写btn_Click一次,并在每个内容页面的按钮的OnClick属性中调用它?我试图避免向每个内容页面的CodeFile添加相同的功能(或任何内容)。

谢谢!

5 个答案:

答案 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中?然后你不必重复任何代码。