【问题标题】:When creating a web control should you override OnLoad or implement Page_Load创建 Web 控件时,您应该覆盖 OnLoad 还是实现 Page_Load
【发布时间】:2008-09-28 23:54:56
【问题描述】:

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

【问题讨论】:

    标签: .net asp.net web-controls


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      您可能会在 Microsoft 的页面生命周期中发现此 article 很有用。

      【讨论】:

      • 同意 - 我认为对整个生命周期有一个很好的了解很重要。
      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

        重写该方法确实需要更多关于页面生命周期的知识,但它并没有什么“错误”。

        【讨论】:

          【解决方案5】:

          阅读 MSDN 页面上标题为:“ASP.NET Web 服务器控制事件模型”的部分:“绑定页面事件”link to the page) 有一些有用的语句如下:

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

          AutoEventWireup 标志开启 Page_Load 等方法)

          【讨论】:

            【解决方案6】:

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

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

            【讨论】:

              【解决方案7】:

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

              【讨论】:

                【解决方案8】:

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

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

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

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

                【讨论】:

                  猜你喜欢
                  • 2020-05-11
                  • 1970-01-01
                  • 1970-01-01
                  • 2016-09-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2023-04-03
                  • 1970-01-01
                  相关资源
                  最近更新 更多