【发布时间】:2010-05-14 15:01:40
【问题描述】:
如果你想维护ViewState,你不应该在Page_Init之后添加动态控件,这可能看起来像一个愚蠢的标题,但我想不出更好的方法来解释这个问题。
我有一个类似于以下的类:
public class WebCustomForm : WebControl, IScriptControl
{
internal CustomRender Content
{
get
{
object content = this.Page.Session[this.SESSION_CONTENT_TRACKER];
return content as CustomRender;
}
private set
{
this.Page.Session[this.SESSION_CONTENT_TRACKER] = value;
}
}
}
CustomRender 是一个实现 ITemplate 的抽象类,我用它来自包含我正在编写的 CustomForms 模块。
在包含WebCustomForm 的页面的Page_Init 上,我通过将相关ID 传递给控件来初始化控件。然后在 WebCustomForm 的重写 OnInit 方法上,我在当前处于活动状态的 CustomRender 控件上调用 Instantiate:
if (this.Content != null)
{
this.Content.InstantiateIn(this);
}
问题是我的CustomRender 控件需要能够更改WebCustomForm 的CustomRender 控件。但是当在 CustomRender 上触发的事件触发时,Page_Init 事件显然已经消失了。所以,我的问题是,如何通过动态添加的控件更改WebCustomForm 的内容?
在我看来,我有三个选择:
- 我将
CustomRender控件分开 出入自己的独立 控制和基本上有一个aspx 每个控件的页面并处理 我自己在页面上的事件(虽然 我希望只是做一个控制 我掉在页面上忘记了) - 我不使用事件,只保留 请求当前页面,但是 使用不同的请求参数
- 我回到绘图板 任何人都可以提出更好的建议 给我。
【问题讨论】:
标签: asp.net-2.0 page-lifecycle dynamic-controls