【问题标题】:ASP.net PreInit() Vs Init()ASP.net PreInit() 与 Init()
【发布时间】:2011-01-16 17:24:03
【问题描述】:

从本地论坛我了解到 PreInit 可用于处理以下问题

PreInit()
>Master pages can be called dynamically
>Themes can be set dynamically
>Programatically add controls to controls collection

我读到 Init() 是为了

Init()

在这种情况下,我们可以读取控件属性(在设计时设置)。 我们无法读取用户更改的控件值,因为更改的值将在 LoadPostData() 事件触发后加载。

问题

我没有明白“我们无法读取用户更改的控制值”这一点。在哪里做 用户更改控件的值?。示例将帮助我理解这一点。

【问题讨论】:

    标签: asp.net events


    【解决方案1】:

    PreInit:在启动阶段完成后和初始化阶段开始之前引发。 将此事件用于以下情况:

    • 检查 IsPostBack 属性以确定这是否是第一次处理页面。此时还设置了 IsCallback 和 IsCrossPagePostBack 属性。
    • 创建或重新创建动态控件。
    • 动态设置母版页。
    • 动态设置主题属性。
    • 读取或设置配置文件属性值。

    初始化:在初始化所有控件并应用任何皮肤设置后引发。各个控件的Init事件发生在页面的Init事件之前。

    【讨论】:

      【解决方案2】:

      假设您有一个文本框、一个下拉列表、一些复选框...用户在其中输入数据并且您想通过写入来读取它们的值

      var text = myTextBox.Text;
      var selectedItem = ddl.SelectedItem;
      

      在调用 LoadPostData 方法之后,您不能这样做。

      这个页面很好地总结了不同的事件以及它们应该用于http://msdn.microsoft.com/en-us/library/ms178472.aspx。它说PreInit 应该用于ie。创建动态控件和Init 用于设置属性。

      【讨论】:

      • 那么 Inti() 事件只用于读取控件的属性,或者我们可以做一些其他的事情吗?
      • 在初始化中你基本上可以做任何事情,除了动态设置一些东西,比如母版页或主题。读取回发值和 Viewstate 必须在 Load 中完成。
      【解决方案3】:

      在第一篇文章中,您展示了几个控件,比如一个文本框和一个提交按钮。

      用户在文本框中输入代码并点击提交。

      用户在文本框中键入控件时更改了控件的值,然后将其发布回页面。

      LoadPostData 处理完毕之前,您将无法访问输入的值。

      这与所有其他服务器端控件几乎相同。

      【讨论】:

        【解决方案4】:

        预初始化: 初始化母版页、用户控件、动态控件

        初始化: 设置控件的属性

        【讨论】:

          【解决方案5】:

          通过 PostBack 更改值。表单数据的变化由当前的 ViewState(直到稍后才加载)与表单数据决定。看到它直到稍后才加载,那么此时您无法读取任何控制值。

          【讨论】:

            猜你喜欢
            • 2014-05-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-04-09
            • 1970-01-01
            • 1970-01-01
            • 2011-03-04
            • 1970-01-01
            相关资源
            最近更新 更多