【问题标题】:If a control's "visible" property is set to "False" do any of its events fire?如果控件的“可见”属性设置为“假”,它的任何事件都会触发吗?
【发布时间】:2025-12-07 09:00:02
【问题描述】:

我有一个设置了 RowDataBound 事件的 GridView。

如果我在另一个控件的事件(例如按钮的OnClick 事件)引起的回发期间将 GridView 的“Visible”属性更改为“False”,GridView 的事件还会触发吗?

查看ASP.NET Page Life Cycle Overview 我无法确定是否会出现这种情况,因为文档只是说明Control Events 发生在Load 事件之后和LoadComplete 事件之前,但没有给出命令我可以看到并且没有任何迹象表明“可见”属性是否会改变它对事件的执行。

我会假设,尽管可能不正确,当一个事件导致回发时,导致回发的事件将首先执行,然后后续的控制事件将不按特定顺序执行。如果一个控件的事件将另一个在回发之前为“假”的控件的“可见”属性更改为“真”,则变为可见的控件将“赶上”它在循环移动到@之前触发的事件987654327@页面事件。

我还假设如果在生命周期中发生Control Events 之前的任何事件期间控件的“可见”属性设置为“假”(PreInitInitInitCompletePreLoadLoad) 这些控件的事件不会执行。

这是正确的吗?我似乎找不到任何官方文件可以证实这一点。

【问题讨论】:

    标签: asp.net events event-handling lifecycle web-controls


    【解决方案1】:

    Visible 属性值不会影响页面中发生的事件顺序和内部控件。 唯一需要注意的是,如果该控件的 Visible 设置为 false,则不会调用该控件的 Render 事件。
    在生命周期中的哪个事件中设置该值并不重要。

    顺序是:

    1. 初始化 - 从子控件到父控件。(子控件的初始化 控件首先触发,页面的 Init 最后触发)
    2. 加载 - 从父控件到子控件。
    3. 渲染 - 从父控件到子控件。
    4. 卸载 - 从子控件到父控件。

    重申一下,通过更改控件的 Visible 属性的值来触发事件不会改变顺序。此外,在添加动态控件时,这里没有 catch-up 概念。

    【讨论】:

      最近更新 更多