是否可以使用用户控件或母版页为许多页面创建基本事件处理程序?

时间:2010-08-13 12:56:40

标签: c# asp.net events user-controls master-pages

我需要为我的网页创建常规操作菜单。所有页面都将实现一些基本功能,即向某些表添加新行,编辑它们,调用过滤器。许多页面只需要基本逻辑来运行此功能。但是有些页面会在菜单中为选项实现自己的逻辑。

我想通过使用菜单中的事件来实现这一点。所以我不需要唯一的事件,而是所有页面的一些基本事件处理程序。并且这个处理程序应该以一种可以覆盖的方式构造。问题是我不知道如何为菜单的所有未来用途创建处理程序。在某种程度上听起来有点乌托邦。创建像这样的架构是真的吗?

我想过两种方法:母版页或用户控件。但我真的不知道它是否可能。你觉得怎么样?

UPD:关于基本网页的两个答案都有所提升:你们肯定知道你在谈论什么。谢谢。抱歉,只能选择一次正确答案。

3 个答案:

答案 0 :(得分:1)

你真的不应该在页面上不必要地实例化对象,因为这种方法肯定会这样做。

记住这一点,您可以创建一个相关页面继承的基页,这样您就可以访问所需的方法。

  1. 创建一个System.Web.UI.Page类型的类。 (我们将其命名为MyBasePageClass)
  2. 实施此课程所需的常用方法
  3. 在需要公开方法的页面上继承此类。例如,将Default.aspx页面类的定义更改为: public partial class默认值:MyBasePageClass
  4. MyBasePageClass中创建的方法必须是公共的才能被Default.aspx.cs看到。

答案 1 :(得分:1)

在我的许多应用程序中,如果我具有跨多个页面共享的功能,则使用公共基类。实际上,这并不罕见。

实现可能如下所示:

public class MyApplicationPage : System.Web.UI.Page
{
    public virtual void RaiseMyCustomEvent(EventArgs e)
    {
    }
}

virtual关键字使该方法可以覆盖。

在我的个人代码中,页面继承可能如下所示:

public partial class MyPage : MyApplicationPage
{
    public override void RaiseMyCustomEvent(EventArgs e)
    {
        // ...
    }
}

最后,在我的母版页中,我可能会在方法中找到这样的代码:

if (Page is MyApplicationPage)
{
    ((MyApplicationPage)Page).RaiseMyCustomEvent(EventArgs.Empty);
}

答案 2 :(得分:0)

我认为“为所有未来用途创建处理程序”听起来很吓人。

我要做的是单独创建页面,并且只有当我识别出一些相同或相似的逻辑时,我才会将其重构为一个单独的类,而这些类可以使用多个表单。

毕竟,代码需要在重用之前使用。