gpt4 book ai didi

asp.net - ASP.NET中添加动态控件,1.1和2.0有区别吗?

转载 作者:行者123 更新时间:2023-12-04 02:24:32 25 4
gpt4 key购买 nike

我很确定在 ASP.NET 1.0/1.1 时代,需要在 Page LifecyclePage_Load 事件之前添加在运行时创建的控件。 (即在 Page_Init 内)。

这是 Microsoft 关于它的一篇文章(针对 .NET 1.0/1.1):
HOW TO: Dynamically Create Controls in ASP.NET :

Note When you create dynamic controls on a Web Form, you must create the controls and add them to the controls collection in either the Page_Init event handler or the Page_Load event handler. Otherwise, the controls may not behave as expected.

然而,在这里的一些帖子中,上述情况似乎不再如此。 Page_Load 中添加的控件似乎适用于其他所有人。一些帖子包括:
creating dynamic control in asp.net
Viewstate - utter confusion.

我自己尝试过,确实有效,但我没有做足够的测试来找出任何意外行为。

那么 Page_Load 是添加动态控件的安全阶段吗?还是仅适用于 .NET 2.0 及更高版本?

最佳答案

我已经用 Reflector 研究了这一点,当您动态添加它们时,Control 类确实会加快速度,无论您何时添加它们。它做所有事情——加载 View 状态/控制状态、调用回发事件、调用事件处理程序等。我不知道它在 ASP.NET 1.x 时代是否不同,但在 2.0 及更高版本中就是这种情况。

至于“危险”——没有经验的用户可能会遇到一些陷阱,因此建议您将它们添加到 Page_Init 或之前。 (请注意,PreInit 事件仅适用于页面本身,不适用于母版页或子控件)。在我的脑海中浮现(我相信可能还有更多):

  • 默认情况下, View 状态按位置加载。也就是说,它忽略控件 ID,在加载 View 状态时只考虑控件在树中的位置。如果您的动态控件在序列化 View 状态时存在,但在反序列化时不存在,则错误的 View 状态项可能会分配给错误的控件,从而导致异常。这可以通过一些设置来改变,尽管我现在懒得去搜索它们了。
  • 由于“加快速度”发生在动态控件添加到页面时,因此某些事件的顺序可能出乎意料。例如,如果您在 Page_PreRender 事件中向页面添加一个 TextBox 控件,则该 TextBox 的 Changed 事件将立即发生。如果您的事件处理程序代码依赖于 PreRender 之前与其余代码一起发生的事件,那么您就完蛋了。

关于asp.net - ASP.NET中添加动态控件,1.1和2.0有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1708264/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com