9

在 Visual Studio 中创建新的 Web 用户控件时,默认情况下会添加 Page_Load 事件。使用它而不是覆盖OnLoad控件上的基本事件有什么好处?只是Page_Load事件之前触发了OnLoad吗?

4

8 回答 8

5

该方法应该是引发事件OnLoad的地方。Load我个人总是尝试处理事件,除非我需要围绕引发事件进行额外处理。

我建议在正常情况下处理事件本身。

于 2008-09-29T00:06:20.220 回答
3

您可能会发现这篇关于 Microsoft 页面生命周期的文章很有用。

于 2008-09-29T00:15:55.813 回答
3

正如您在上面看到的,如果选择是明智的,它确实主要归结为个人选择。我见过的最好的快速但可靠的概述是http://weblogs.asp.net/infinitiesloop/archive/2008/03/24/onload-vs-page-load-vs-load-event.aspx

于 2008-09-29T05:43:19.973 回答
2

这真的只是一个选择问题。对我来说,一个对象将一个事件附加到自己上似乎很奇怪,尤其是当有一个可以覆盖的方法时。

我认为 ASP.NET 团队使用事件是因为这是 ASP 中 Global.asa 的模型,并且可以降低不了解继承和覆盖虚拟方法的开发人员的门槛。

覆盖该方法确实需要更多关于页面生命周期的知识,但它没有任何“错误”。

于 2008-09-29T02:27:21.223 回答
2

阅读MSDN 页面上名为“绑定页面事件”的部分,标题为: “ASP.NET Web 服务器控制事件模型”链接到页面)有一些有用的语句,如下所示:

AutoEventWireup属性的一个缺点是它要求页面事件处理程序具有特定的、可预测的名称。这限制了您命名事件处理程序的灵活性。另一个缺点是性能受到不利影响,因为 ASP.NET 在运行时搜索方法。对于具有高流量的网站,对性能的影响可能很大。

AutoEventWireup标志打开诸如 Page_Load 之类的方法)

于 2014-10-02T07:52:40.860 回答
0

即使您继承自UserControl,我认为您应该避免在不必要的情况下覆盖受保护的方法。可以让Page_Load您更轻松地添加特定于您的UserControl.

OnLoad当您需要绝对控制何时(/如果)Load触发事件时才覆盖(这应该很少见,IMO)。

于 2008-09-29T00:28:05.193 回答
0

我认为是一样的。恕我直言,有了事件,你就有了更多的灵活性,因为你的事件可以发生多个听众!

于 2008-09-29T08:20:22.950 回答
0

我认为这两种方法存在一个潜在的显着差异。

我指的是控制执行顺序的能力。

如果您正在覆盖,您知道基类 Load 何时发生,因为您正在调用它。这提供了更多的控制,但正如许多人所说的那样,这可能是一件坏事。

如果您使用事件,您无法保证调用顺序。这迫使您编写 Load 事件,该事件应该不知道超类在 Load 阶段正在做什么。我认为这将是首选方法,也许这就是为什么 VS 自动生成的代码是这种方式的原因。

于 2008-10-16T08:47:30.757 回答