首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Asp.Net中动态添加控件

在Asp.Net中动态添加控件
EN

Stack Overflow用户
提问于 2008-09-22 06:07:54
回答 8查看 9.1K关注 0票数 11

我正试着用我的头脑去理解asp.net。我有一个长期的php开发者的背景,但我现在面临着学习asp.net的任务,我在这方面遇到了一些麻烦。这很可能是因为我试图强迫框架做一些它不想做的事情--所以我想学习如何“以正确的方式”去做。:-)

我的问题是如何在运行时以编程方式向页面添加控件。据我所知,您需要在page_init中创建控件,否则它们会在下一个PostBack中消失。但很多时候,我会遇到这样的问题:我不知道在page_init中添加哪些控件,因为它依赖于以前PostBack中的值。

一个简单的方案可以是在设计器中添加下拉控件的窗体。下拉列表设置为AutoPostBack。当PostBack发生时,我需要呈现一个或多个依赖于从下拉控件中选择的值的控件,并且最好让这些控件的行为就像它们是由设计添加的一样(就像“当回发时,行为”正确“)。

我走错路了吗?

EN

回答 8

Stack Overflow用户

发布于 2008-09-22 06:23:52

您必须在OnInit事件内添加控件,视图状态将被保留。不要使用if(ispostback),因为每次都必须添加控件,回发中的事件!

(反)视图状态的序列化发生在OnInit之后和OnLoad之前,因此如果在OnInit中添加控件,视图状态持久性提供者将看到动态添加的控件。

但在您描述的场景中,可能多视图或简单的隐藏/显示(可见属性)将是更好的解决方案。

这是因为在OnInit事件中,当你必须读取dropdown并添加新控件时,视图状态还没有被读取(反序列化),并且你不知道用户选择了什么!(你可以做request.form(),但感觉有点不对)

票数 3
EN

Stack Overflow用户

发布于 2008-09-30 08:07:14

在与这个问题搏斗了一段时间后,我提出了这些基本规则,这似乎是可行的,但YMMV。

如果必须在事件处理程序中使用添加控件,请使用Aydsman的提示并在重写的LoadViewState.中重新创建控件,请使用

  • 尽可能使用声明性控件
  • use databinding where possible
  • Understand how works
  • 属性

TRULY Understanding ViewState是一本必读的书。

Understanding Dynamic Controls By Example展示了一些关于如何使用数据绑定而不是动态控件的技术。

TRULY Understanding Dynamic Controls还澄清了可用于避免动态控件的技术。

希望这对其他有同样问题的人有所帮助。

票数 2
EN

Stack Overflow用户

发布于 2008-09-22 06:46:47

如果您确实需要使用动态控件,则应执行以下操作:

  • 在OnInit中,重新创建与前一个请求完成时页面上的控件层次结构完全相同的控件层次结构。(当然,如果这不是最初的请求)
  • 在OnInit之后,框架将从上一个请求加载视图状态,现在所有的控件都应该处于稳定状态。
  • 在OnLoad中,删除不需要的控件并添加必要的控件。此时,您还必须以某种方式保存当前的控件树,以便在下一个请求的第一步中使用。您可以使用会话变量来指定如何创建动态控件树。我甚至在会话中存储了整个Controls集合一次(把您的干草叉放在一边,只是为了演示)。

重新添加那些你不需要的、在OnLoad中无论如何都会被移除的“陈旧”控件似乎有点奇怪,但Asp.Net在设计时并没有真正考虑到动态控件的创建。如果在viewstate加载过程中没有保留完全相同的控件层次结构,那么页面中就会潜伏着各种难以找到的bug,因为旧控件的状态会被加载到新添加的控件中。

阅读Asp.Net页面的生命周期,尤其是视图状态是如何工作的,它将变得清晰。

编辑:这是一篇很好的文章,介绍了视图状态的行为,以及在处理动态控件时应该考虑的问题:http://geekswithblogs.net/FrostRed/archive/2007/02/17/106547.aspx

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/113392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档