【发布时间】:2010-10-17 03:12:23
【问题描述】:
Previous Called:如何处理在aspx中加载下动态创建的控件
回答以下问题:确定要恢复哪些控件所需的信息包含在专用视图状态对象中。
我在代码隐藏页面中动态创建控件 - 这些控件都连接到单击处理程序,因此当回发发生时,我必须重新创建以前的控件集,然后清除控件并生成新的控件集基于上一次点击。
这在正常情况下的编码和正常工作基本上如下:
in Page_Load
if not postback generate default buttons
else if postback re-generate buttons that were shown on last page
in click_handler
Clear the dynamically generated buttons created in the Page_Load
generate new buttons based on the specific click being handled
但是,当服务器负载过重时,我们开始遇到问题:
每秒有 5 个用户,我们开始遇到异常: 找到了多个具有相同 ID 'add0' 的控件。 FindControl 要求控件具有唯一的 ID。
每秒有 100 个用户,我们开始遇到异常: 在 DataBind、Init、Load、PreRender 或 Unload 阶段不能修改控件集合。
一旦发生这种情况,所有后续请求都会出现相同的错误,并且必须重新启动 IIS。
可能是什么原因造成的,我该如何避免? html 请求在负载下是否可能会相互覆盖和干扰?页面卸载后对象是否会以某种方式传递,从而允许下一页加载绊倒它们?
【问题讨论】:
标签: asp.net dynamic controls page-lifecycle