我有一个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);
}
答案 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)
Theres总是动态控制占位符 - http://www.denisbauer.com/ASPNETControls/DynamicControlsPlaceholder.aspx
答案 2 :(得分:0)