2010-05-14 65 views
0

可能看起来像一个愚蠢的标题,因为如果你想维护ViewState,你不应该在Page_Init中添加动态控件,但我想不出解决问题的更好方式。Page_Init动态添加控件来自页面_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控制这是当前活动:

if (this.Content != null) 
{ 
    this.Content.InstantiateIn(this); 
} 

的问题是,我CustomRender控制需要改变CustomRender控制WebCustomForm的能力。但是当CustomRender触发的事件发生时,Page_Init事件显然已经消失。所以,我的问题是,如何从动态添加的控件中更改WebCustomForm的内容?

我看到它的方式,我有三种选择:

  1. 我的CustomRender控制 分离出来,变成自己独立 控制和基本都有每控制一个aspx 页面和处理 事件自己(虽然 我希望只是做一个控制 我放在页面上,忘了)
  2. 我不使用事件,只是保持 请求当前页面,但 不同的请求参数
  3. 我回到绘图板与 什么更好的建议任何人都可以 给我。

回答

0

我去选项1.我废除了全部测试控制和需要坐不同的页面上刚刚创建单独的控制。我添加了Postback Urls属性并创建了用于在控件之间传递ID的Session属性,因此我不必依靠RequestParams。

0

为什么不在InitComplete事件上做。这是在页面被初始化之后,但在状态被加载之前。

+0

因为我的事件将在InitComplete事件之后触发。 – GenericTypeTea 2010-05-18 09:00:49