代码之家  ›  专栏  ›  技术社区  ›  djdd87

在页面初始化后从事件动态添加控件

  •  0
  • djdd87  · 技术社区  · 14 年前

    可能看起来像是一个愚蠢的标题,因为如果你想维护的话,不应该在页面初始化后添加动态控件。 ViewState 但是我想不出更好的方法来解释这个问题。

    我有一个类似以下的班级:

    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 是一个抽象类,它实现了用于自包含正在编写中的customforms模块的itemplate。

    Page_Init 包含 WebCustomForm ,我通过将相关ID传递给控件来初始化该控件。然后在重写 OnInit 方法 WebCuffic表单 我调用上的实例化 定制渲染 当前活动的控件:

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

    问题是我的 定制渲染 控件需要能够更改 定制渲染 控制 WebCuffic表单 . 但是,当在customrender上触发的事件触发时,page_init事件显然已经关闭。所以,我的问题是,如何更改 WebCuffic表单 从动态添加的控件?

    在我看来,我有三个选择:

    1. 我分开 定制渲染 控制 独立自主 控制,基本上有一个ASPX 按控件分页并处理 页面上的事件(尽管 我只是想控制一下 我翻页忘了)
    2. 我不使用活动,只保留 请求当前页,但 具有不同的请求参数
    3. 我回到画板上 有更好的建议吗 给我。
    2 回复  |  直到 14 年前
        1
  •  0
  •   Haacked    14 年前

    为什么不在initcomplete事件上执行呢?这是在页面初始化之后,但在状态加载之前。

        2
  •  0
  •   djdd87    14 年前

    我选择了选项1。我去掉了整体控件,只创建了需要放在不同页面上的单独控件。我添加了一些属性来获取回发URL,并创建了会话属性来在控件之间传递ID,这样就不必依赖于requestparams。