创建Web控件时,我们应该重写OnLoad或者实现Page_Load
在Visual Studio中创建新的Web用户控件时,默认情况下会添加Page_Load事件。使用此方法而不是覆盖控件上的基本" OnLoad"事件有什么好处?仅仅是Page_Load
事件在OnLoad
之前触发?
解决方案
OnLoad方法应该是引发Load事件的地方。我个人总是尝试处理事件,除非我需要围绕引发事件进行额外的处理。
我建议在正常情况下自行处理事件。
我们可能会发现Microsoft在页面生命周期上的这篇文章很有用。
即使我们是从UserControl继承的,我也认为如果不需要的话,我们应该远离重写受保护的方法。使用Page_Load可以使我们更轻松地添加特定于UserControl的代码。
仅在需要绝对控制何时触发Load事件时才覆盖OnLoad(这在IMO中应该很少)。
这实际上只是一个选择问题。在我看来,对象将事件添加到自身似乎很奇怪,尤其是当存在可以覆盖的方法时。
我认为ASP.NET团队使用事件是因为这是ASP中Global.asa的模型,并降低了不了解继承和覆盖虚拟方法的开发人员的门槛。
覆盖该方法的确需要更多有关页面生命周期的知识,但没有"错"的地方。
正如我们在上面看到的,如果选择是明智的,那么大多数情况都取决于个人选择。我见过的最好的快速而可靠的概述是在http://weblogs.asp.net/infinitiesloop/archive/2008/03/24/onload-vs-page-load-vs-load-event.aspx
我认为是一样的。
恕我直言,有了事件,我们将有更多的灵活性,因为我们可以对事件进行多个监听!
我认为这两种方法之间可能存在重大差异。
我指的是具有控制执行顺序的能力。
如果我们要覆盖,则知道基类Load何时发生,因为我们正在调用它。这提供了更多的控制权,但正如许多人争辩的那样,这可能是一件坏事。
如果使用事件,则无法保证通话顺序。这迫使我们编写Load事件,该事件应该与Load阶段中超类的操作无关。我认为这将是首选方法,也许这就是为什么VS自动生成的代码是这种方式的原因。