如果控件的“可见”属性设置为“假”,它的任何事件都会触发吗?
Posted
技术标签:
【中文标题】如果控件的“可见”属性设置为“假”,它的任何事件都会触发吗?【英文标题】:If a control's "visible" property is set to "False" do any of its events fire? 【发布时间】:2017-09-30 13:42:18 【问题描述】:我有一个设置了 RowDataBound
事件的 GridView。
如果我在另一个控件的事件(例如按钮的OnClick
事件)引起的回发期间将 GridView 的“Visible”属性更改为“False”,GridView 的事件还会触发吗?
查看ASP.NET Page Life Cycle Overview 我无法确定是否会出现这种情况,因为文档只是说明Control Events
发生在Load
事件之后和LoadComplete
事件之前,但没有给出命令我可以看到并且没有任何迹象表明“可见”属性是否会改变它对事件的执行。
我会假设,尽管可能不正确,当一个事件导致回发时,导致回发的事件将首先执行,然后后续的控制事件将不按特定顺序执行。如果一个控件的事件将另一个在回发之前为“假”的控件的“可见”属性更改为“真”,则变为可见的控件将“赶上”它在循环移动到@之前触发的事件987654327@页面事件。
我还假设如果在生命周期中发生Control Events
之前的任何事件期间控件的“可见”属性设置为“假”(PreInit
、Init
、InitComplete
、PreLoad
和Load
) 这些控件的事件不会执行。
这是正确的吗?我似乎找不到任何官方文件可以证实这一点。
【问题讨论】:
【参考方案1】:Visible 属性值不会影响页面中发生的事件顺序和内部控件。 唯一需要注意的是,如果该控件的 Visible 设置为 false,则不会调用该控件的 Render 事件。 在生命周期中的哪个事件中设置该值并不重要。
顺序是:
-
初始化 - 从子控件到父控件。(子控件的初始化
控件首先触发,页面的 Init 最后触发)
加载 - 从父控件到子控件。
渲染 - 从父控件到子控件。
卸载 - 从子控件到父控件。
重申一下,通过更改控件的 Visible 属性的值来触发事件不会改变顺序。此外,在添加动态控件时,这里没有 catch-up 概念。
【讨论】:
以上是关于如果控件的“可见”属性设置为“假”,它的任何事件都会触发吗?的主要内容,如果未能解决你的问题,请参考以下文章
不可见的标签页(标签控件)上的控件返回Visible = false