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

2023-12-11

我非常确定在 ASP.NET 1.0/1.1 时代,需要在运行时创建的控件之前添加Page_Load事件的页面生命周期(即里面Page_Init).

这是 Microsoft 的一篇文章(针对 .NET 1.0/1.1):
如何:在 ASP.NET 中动态创建控件:

注意 创建动态控件时 在 Web 表单上,您必须创建 控件并将它们添加到控件中 Page_Init 中的集合 事件处理程序或 Page_Load 事件 处理程序。否则,控件可能会 行为不符合预期。

然而,在这里的一些帖子中,似乎上述情况不再是这样了。添加的控件Page_Load似乎正在为其他人工作。一些帖子包括:
在 ASP.NET 中创建动态控件
Viewstate - 完全混乱。

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

So is Page_Load添加动态控件的安全阶段?或者仅适用于.NET 2.0 及更高版本?


我已经用 Reflector 研究过这个问题,当您动态添加它们时,Control 类确实可以加快速度,无论您何时添加它们。它执行所有操作 - 加载视图状态/控制状态、调用回发事件、调用事件处理程序等。我不知道在 ASP.NET 1.x 时代是否有所不同,但在 2.0 及更高版本中就是这种情况。

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

  • 默认情况下,视图状态按位置加载。也就是说,它会忽略控件 ID,而在加载视图状态时仅考虑控件在树中的位置。如果动态控件在视图状态序列化时存在,但在反序列化时不存在,则错误的视图状态项可能会分配给错误的控件,从而导致异常。这可以通过某些设置来更改,尽管我现在懒得搜索它们。
  • 由于“加快速度”是在将动态控件添加到页面时发生的,因此某些事件的顺序可能是意外的。例如,如果在 Page_PreRender 事件中向页面添加一个 TextBox 控件,则该 TextBox 的 Changed 事件就会立即发生。如果您的事件处理程序代码依赖于 PreRender 之前其余部分发生的事件,那么您就完蛋了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在ASP.NET中添加动态控件,1.1和2.0有区别吗? 的相关文章

随机推荐

  • 通过完整记录握手来破坏 TLS 安全

    我最近一直在研究 TLS 我不确定它为什么如此安全 但可能是由于对其工作原理的误解 但是 如果记录了整个握手过程 无论是使用中间人攻击还是目标计算机上的数据包嗅探器 那么任何剩余的通信都可以被解密 因为您将拥有客户端和服务器用来生成的所有信
  • Polly WaitAndRetryAsync 与 WaitAndRetry

    我正在 NET Core WebAPI 项目中研究重试逻辑 我正在使用pollyWaitAndRetryAsync WaitAndRetry方法 有什么区别WaitAndRetryAsync vs WaitAndRetry 以及什么时候应该
  • 如何使用 FxCop 自定义规则验证 DataReader 实际上已关闭?

    我为 FxCop 1 36 编写了一些自定义规则 我编写了代码来查找打开的 DataReader 是否关闭的情况 但它不会检查哪个 DataReader 对象正在调用Close 方法 所以我无法确定所有打开的 DataReader 对象是否
  • 宏未显示在运行宏菜单中

    我开始学习 VBA 但我不明白为什么从互联网复制粘贴的一些宏没有显示在运行宏菜单 Alt F8 中 下面有 2 个宏 但只显示第二个 为什么 我该如何解决它 Sub Test1 ByVal Target As Hyperlink End S
  • 增强类序列化,成员类型的变化

    如何处理序列化成员类型的切换 同时保持与先前存档的兼容性 例如 我想改变float int to double size t 我知道我可以增加版本号 但这会使代码变得混乱 有不同的方法来处理吗 如果有区别 成员将通过以下顺序进行序列化MAK
  • 通过数组运算有效搜索包含子排列的排列?

    我有一组整数 比如 S 1 10 以及两个矩阵 N 和 M 它们的行是 S 阶元素的一些 但不一定是所有可能的 排列 比如 3 和分别为 5 个 例如N 1 2 3 2 5 3 M 1 2 3 4 5 2 4 7 8 1 排列 P 的子排列
  • Spark 中的嵌套并行化?正确的做法是什么?

    嵌套并行化 假设我正在尝试在 Spark 中执行相当于 嵌套 for 循环 的操作 就像在常规语言中一样 假设我在内部循环中有一个例程 可以以这种方式估计 PiPi Average Spark 示例确实如此 请参阅估计 Pi i 1000
  • Python lmfit 约束:a < b < c

    我在用lmfit在Python中拟合一些数据 其中包括拟合变量a b和c 我需要确保 a http cars9 uchicago edu software python lmfit MinimizerResult constraints h
  • Android 和 Proguard?

    我正在尝试在我的 Android 应用程序中使用 proguard proguardGui 接受一个输入和一个输出 输入需要一个 jar 文件 但是android的APK文件不包含任何jar 我尝试传递 apk 文件以及 apx 内的 de
  • 登录失败时如何在没有数据绑定的情况下清除PasswordBox的内容?

    我有一个 wpf 应用程序 由于我无法控制的原因 我正在仔细遵循 mvvm 模式 出于我无法控制的安全原因 我不想将数据绑定到我的密码框 登录失败时如何清除密码框内容 我更喜欢在 xaml 中这样做的方法 您可以创建您的attached D
  • 如何在 WebView 中上传多个图像?

    如何使我的应用程序的 WebView 中的文件上传行为与浏览器应用程序中的行为相同 我正在尝试在我的 Android 应用程序中创建一个 WebView 允许上传用相机拍摄的多张图像 当我在浏览器应用程序中打开下面的 HTML 代码时 我可
  • 使用 Javascript 加载其他外部 Javascript

    我有一个 JS 代码库可以从文件夹中加载 而不是键入HTML 文档的标记中一行一行 有没有一种方法可以仅链接一个 Javascript 文件来组织并自动加载其他 javascript 文件 我知道 Dojotoolkit 正在使用这种技术
  • 使用实体框架级联删除 - EF 删除的相关实体

    我在实体框架中遇到删除问题 简而言之 EF 显式尝试从数据库中删除实体 即使我已显式配置 EF 以在数据库中使用级联删除 我的设计 我有三种实体类型 MainEntity EntityTypeA and EntityTypeB EF已配置删
  • Google 地图嵌入 + 搜索框

    我正在尝试为我的网站制作一张地图 它将显示一些餐馆的标记 我还希望人们能够搜索地图 这样他们就可以查找地址并能够看到该地区的餐馆 我得到了带有我想要的标记的地图代码
  • 右浮动和绝对位置不能一起工作

    我希望 div 始终位于其父 div 的右侧 所以我使用float right 有用 但我也希望插入时不影响其他内容 所以我使用position absolute Now float right不起作用 我的 div 始终位于其父 div
  • 如何让 UITextView 检测网站、邮件和电话号码的链接

    我有一个 UITextView 对象 UIView 中的文本有电话号码 邮件链接 网站链接 我想将它们显示为具有以下功能的链接 当有人点击 URL 时 Safari 应打开该网站 当有人点击电子邮件链接时 邮件应该打开 并且我的地址位于字段
  • 将 CCMenu 与网格对齐

    有谁知道让 CCMenuItems 数组与网格对齐的最佳实践方法 这是一个cocos2d问题 例如 int levelCount 10 CCMenu menuArray CCMenu menuWithItems nil for int x
  • 使用ajax设置PHP会话变量

    想要更改 SESSION 变量 fullname 的值而不刷新页面 我使用ajax的实现 第 1 页 html
  • java swing应用程序中的快速搜索?

    我正在思考什么组件最适合在 swing 中显示快速搜索结果 我想创建这样的东西 创建一个文本字段 用户可以在其中输入一些文本 在输入过程中我将改进数据库的后端快速搜索 并且我想在文本框下方显示数据 他将能够浏览结果并按输入结果将显示在表格中
  • 在ASP.NET中添加动态控件,1.1和2.0有区别吗?

    我非常确定在 ASP NET 1 0 1 1 时代 需要在运行时创建的控件之前添加Page Load事件的页面生命周期 即里面Page Init 这是 Microsoft 的一篇文章 针对 NET 1 0 1 1 如何 在 ASP NET