ASP.Net - 如何从另一个WebControl添加HiddenField并维护它?

时间:2009-09-24 14:12:45

标签: c# asp.net viewstate hiddenfield

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

我尝试过以下示例:Click here,但由于在Page Init事件中this.Page.Form为null,因此无效。

我尝试过以下操作,但从未保留过该值:

HiddenField hd_IsDirty = new HiddenField();

protected override void OnInit(EventArgs e)
{

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

    base.OnInit(e);

}

3 个答案:

答案 0 :(得分: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);
            }
        }
    }
}

答案 1 :(得分:1)

答案 2 :(得分:0)

请参阅此answer上的question

答案将向您展示如何动态添加控件,这就是您要尝试的操作。