在创建Web控件时,您应该重写OnLoad或实现Page_Load

时间:2008-09-28 23:54:56

标签: .net asp.net web-controls

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

8 个答案:

答案 0 :(得分:5)

OnLoad方法应该是引发Load事件的地方。我个人总是试图处理这个事件,除非我需要在举办活动时做额外的处理。

我建议在正常情况下自行处理事件。

答案 1 :(得分:3)

您可能会在Microsoft页面生命周期中找到此article

答案 2 :(得分:3)

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

答案 3 :(得分:2)

这只是一个选择问题。对我而言,对象将事件附加到自身似乎很奇怪,特别是当有一个方法可以覆盖时。

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

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

答案 4 :(得分:2)

阅读MSDN页面上标题为:&#34; ASP.NET Web服务器控件事件模型&#34; < / em>(link to the page) 有一些有用的陈述,如:

  

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

AutoEventWireup 标志打开像Page_Load这样的方法)

答案 5 :(得分:0)

即使您继承自UserControl,我认为如果您不需要,也应该远离覆盖受保护的方法。 Page_Load可让您更轻松地添加特定于UserControl的代码。

如果您需要绝对控制OnLoad事件被触发的时间(这应该是罕见的,IMO),则只覆盖Load

答案 6 :(得分:0)

我认为它是一样的。 恕我直言,通过活动,您可以获得更多灵活性,因为您可以为您的活动发生多个聆听者!

答案 7 :(得分:0)

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

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

如果你要覆盖,你就会知道什么时候基类Load会因为你正在调用它而发生。这提供了更多的控制,但可能是许多人会争辩的坏事。

如果您使用活动,则无法保证通话​​顺序。这会强制您编写Load事件,该事件应该与Load Class期间超类正在执行的操作无关。我认为这将是首选方法,也许这就是VS自动生成代码的原因。