C# 是否可以使用用户控件或母版页为多个页面创建基本事件处理程序?
我需要为我的页面创建常规操作菜单。所有页面都将实现一些基本功能,即向某些表中添加新行、编辑它们、调用过滤器。许多页面只需要基本逻辑即可运行此功能。但有些页面将为菜单中的选项实现自己的逻辑 我想通过使用菜单中的事件来实现这一点。因此,我不仅需要事件,还需要一些用于所有页面的基本事件处理程序。这个处理程序可以被重写。问题是我不知道如何为菜单的所有未来用途创建处理程序。在某种程度上听起来有点乌托邦。这样的建筑是真的吗 我考虑了两种方法:母版页或用户控制。但我真的不知道这是否可能。那你觉得呢 UPD:对基本页面的两个答案都投了赞成票:你们肯定知道自己在说什么。谢谢很抱歉,正确答案只能选择一次。我认为“为所有未来用途创建处理程序”听起来很可怕 我要做的是单独创建页面,只有当我确定了一些相同或相似的逻辑时,我才会将其重构为一个单独的类,几个表单可以使用这个类C# 是否可以使用用户控件或母版页为多个页面创建基本事件处理程序?,c#,asp.net,events,user-controls,master-pages,C#,Asp.net,Events,User Controls,Master Pages,我需要为我的页面创建常规操作菜单。所有页面都将实现一些基本功能,即向某些表中添加新行、编辑它们、调用过滤器。许多页面只需要基本逻辑即可运行此功能。但有些页面将为菜单中的选项实现自己的逻辑 我想通过使用菜单中的事件来实现这一点。因此,我不仅需要事件,还需要一些用于所有页面的基本事件处理程序。这个处理程序可以被重写。问题是我不知道如何为菜单的所有未来用途创建处理程序。在某种程度上听起来有点乌托邦。这样的建筑是真的吗 我考虑了两种方法:母版页或用户控制。但我真的不知道这是否可能。那你觉得呢 UPD:对
毕竟,代码在重用之前需要先被使用。你真的不应该像这种方法那样不必要地实例化页面上的对象 记住这一点,您可以创建一个相关页面从中继承的基页,这样您就可以访问所需的方法
默认情况下,在MyBasePageClass中创建的方法必须是公共的。aspx.cs。在我的许多应用程序中,如果我有跨多个页面共享的功能,我会使用公共基类。这真的不是什么稀奇的做法 实现可能如下所示:
public class MyApplicationPage : System.Web.UI.Page
{
public virtual void RaiseMyCustomEvent(EventArgs e)
{
}
}
public partial class MyPage : MyApplicationPage
{
public override void RaiseMyCustomEvent(EventArgs e)
{
// ...
}
}
virtual
关键字使方法可重写
在我的个人代码中,页面继承可能如下所示:
public class MyApplicationPage : System.Web.UI.Page
{
public virtual void RaiseMyCustomEvent(EventArgs e)
{
}
}
public partial class MyPage : MyApplicationPage
{
public override void RaiseMyCustomEvent(EventArgs e)
{
// ...
}
}
最后,在我的母版页中,我可能会在一个方法中找到如下代码:
if (Page is MyApplicationPage)
{
((MyApplicationPage)Page).RaiseMyCustomEvent(EventArgs.Empty);
}
因为这是许多程序员提出的一个问题,所以我投了赞成票。当然,这是对的,但我只是将用Delphi编写的Winforms项目重新构建为Asp.Net。在旧版本中有这种体系结构,但我当然不能仅仅复制用Deplhi的特殊功能和黑客编写的Delphi算法,尤其是在web上。我相信如果您尝试重新创建相同的应用程序流和逻辑,您将很难将项目从WinForms移动到WebForms。这两种技术的语义太不一样了。是的-创建基类是一种方法,如上所述,但有两个更正:第一个事件处理程序方法不需要是公共的,它们可以得到保护。其次,您希望使它们成为虚拟的,以便某些页面可以覆盖默认事件处理行为并提供自己的行为。是的,抱歉,受保护,因为您是从类继承的。