代码之家  ›  专栏  ›  技术社区  ›  barneytron

为什么Visual Studio会将Web窗体的页面加载作为默认值?

  •  3
  • barneytron  · 技术社区  · 16 年前

    当创建新的webform时,Visual Studios在代码隐藏中创建一个页面加载处理程序作为默认值,这很酷。因此,多年来,我一直在为页面加载中的控件设置属性等操作设置代码。最近,我使用Reflector查看了一些由Microsoft编写的程序集,发现它们在一个名为OnLoad的方法中放入了相同类型的逻辑(这可能会引发加载事件)。所以我开始想,在onload或page_load中,设置控件属性的最佳位置在哪里?或者用完全不同的方法?如果没有页面加载,为什么Studio要将其添加到代码后面?

    我最后的想法: 虽然我知道把逻辑放在onload中可以很好地工作,但我现在可能会坚持页面加载,因为这是常规的。我真的问了这个问题,想知道在我开始看到其他人的代码中出现了onload之后,我是否错过了一些新的东西。谢谢大家的周到回答!

    5 回复  |  直到 16 年前
        1
  •  3
  •   DavGarcia    16 年前

    page_load只是onload的autoeventwireup。你会认为使用它没有任何区别,但我同意 K. Scott Allen at Ode to Code 只有当你试图做一些意想不到的事情时,你才应该偏离常规。重写一个类似于onload的虚拟方法意味着你正在尝试做一些不同的事情,比如不调用base.onload,而大多数程序员通常不会这样做。

        2
  •  1
  •   Chad Moran    16 年前

    你不想使用onload,他们使用它的原因是因为它是引发页面加载事件的包装器。他们把逻辑放在那里是因为他们没有处理页面加载事件。

    简而言之,继续使用页面加载。

        3
  •  1
  •   Danut Enachioiu    16 年前

    通常,onx方法是引发事件x的方法。它们类似于类的内部事件处理程序。这意味着,当您编写一个类(其中包括检测到某个事件正在发生)时,通常会调用一个方法:1。在这种情况下,你的班级需要做什么,2。激发外部事件。

    我相信这一点之所以流行的一个核心原因是,就目前而言,您不能仅仅调用事件委托来触发事件,您必须始终检查所述委托是否为空。所以您希望用一个方法封装这个签入。

    简而言之,除非您编写的是自己的类,它有一个加载事件,否则您不需要考虑一个onload方法。

        4
  •  1
  •   Al W    16 年前

    到目前为止所有非常有效的观点。但不要让这些家伙吓到你。如果你想使用onload方法,你不会伤害任何东西。只是不要忘记调用base.onload()。

        5
  •  1
  •   Zhaph - Ben Duguid    16 年前

    事实上,如果回到ASP.NET 1.1开发的糟糕时期,您实际上会看到在每一页中为您创建的连接:

        #region Web Form Designer generated code
        override protected void OnInit(EventArgs e)
        {
            InitializeComponent();
            base.OnInit(e);
        }
    
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {    
            this.Load += new System.EventHandler(this.Page_Load);
        }
        #endregion
    

    偶尔,我会做一些事情,导致vs删除初始化组件中的那一行,并且无法找出页面停止做任何事情的原因。