可能看起来像一个愚蠢的标题,因为如果你想维护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模块。
在包含Page_Init
的页面的WebCustomForm
上,我通过将相关ID传递给它来初始化控件。然后在OnInit
的重写WebCustomForm
方法上,我调用当前处于活动状态的CustomRender
控件上的实例化:
if (this.Content != null)
{
this.Content.InstantiateIn(this);
}
问题是我的CustomRender
控件需要能够更改CustomRender
的{{1}}控件。但是当触发CustomRender的事件发生时,Page_Init事件显然已经消失了。所以,我的问题是,如何从动态添加的控件中更改WebCustomForm
的内容?
我看到它的方式,我有三个选择:
WebCustomForm
控件分开
独自站出来
控制,基本上有一个aspx
每个控件的页面和处理
我自己在页面上的事件(虽然
我希望能够控制一下
我放在页面上忘记了)答案 0 :(得分:0)
为什么不在InitComplete事件上执行此操作。这是在页面初始化之后但在状态加载之前。
答案 1 :(得分:0)
我选择了1.我取消了整个控件,只是创建了需要坐在不同页面上的单独控件。我添加了属性以获取Postback Urls并创建了Session属性,以便在控件之间传递ID,因此我不必依赖RequestParams。