1

HiddenField を動的に追加したい WebControl があります。

次の例を試してみました: Click here ですが、ページの初期化イベントで 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);

}
4

3 に答える 3

2

次の作品:

毎回コントロールを作成します(悪いようです!):

HiddenField hd_IsDirty = new HiddenField();

コントロールにはControlStateOnInitが必要であることをページに伝えます。

    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 に答える