在visual studio中创建新的Web用户控件时,默认情况下会添加Page_Load事件。使用它而不是覆盖控件上的基础OnLoad
事件有什么好处?只是Page_Load
事件在OnLoad
之前触发了吗?
答案 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自动生成代码的原因。