1

我有一个 WebControl,我想从中动态添加一个 HiddenField。

我尝试了以下示例:单击此处,但这不起作用,因为 this.Page.Form 在 Page Init 事件中为空。

我尝试了以下方法,但该值从未保持:

HiddenField hd_IsDirty = new HiddenField();

protected override void OnInit(EventArgs e)
{

    this.Controls.Add(hd_IsDirty);
    hd_IsDirty.ID = "hd_IsDirty";

    base.OnInit(e);

}
4

3 回答 3

2

以下作品:

每次都创建控件(看起来很糟糕!):

HiddenField hd_IsDirty = new HiddenField();

告诉页面该控件需要一个 ControlState OnInit:

    this.Page.RegisterRequiresControlState(this);

覆盖 ControlState 方法:

protected override object SaveControlState()
{

    object obj = base.SaveControlState();

    if (!string.IsNullOrEmpty(hd_IsDirty.Value))
    {
        if (obj != null)
        {
            return new Pair(obj, hd_IsDirty.Value);
        }
        else
        {
            return hd_IsDirty.Value;
        }
    }
    else
    {
        return obj;
    }
}

protected override void LoadControlState(object state)
{
    if (state != null)
    {
        Pair p = state as Pair;
        if (p != null)
        {
            base.LoadControlState(p.First);
            hd_IsDirty.Value = (string)p.Second;
        }
        else
        {
            if (state is string)
            {
                hd_IsDirty.Value = (string)state;
            }
            else
            {
                base.LoadControlState(state);
            }
        }
    }
}
于 2009-09-24T14:48:38.697 回答
1

总是有动态控件占位符 - http://www.denisbauer.com/ASPNETControls/DynamicControlsPlaceholder.aspx

于 2009-09-25T10:58:15.323 回答
0

请参阅此问题答案

答案将向您展示如何动态添加控件,这就是您正在尝试做的事情。

于 2009-09-24T14:18:49.577 回答