【发布时间】:2013-11-19 21:36:16
【问题描述】:
我最近创建了一个控件,它将在占位符中创建一个动态控件,因此为了保留该控件,我将它存储到 viewstate 中,然后在回发中我重新创建了它。实际上它正在工作,但是我如何从这个控件中保存新的更改值,因为在回发之后给了我相同的值。
控件保持在视图状态中的属性
public Control MyControl
{
get
{
return (Control)ViewState["MyControl"] ?? null;
}
set
{
this.ViewState["MyControl"] = value;
}
}
然后是一个方法,当我单击编辑按钮以从文字更改为文本框时将创建控件。
private void CreateControl()
{
Control ctrl = new TextBox();
this.MyControl = ctrl;
this.BindValue(ctrl); //Bind the value from DB Text = "1"
this.placeHolder.Controls.Add(ctrl);
}
然后控件将出现值“1”,然后我更改为“2”然后单击按钮保存更改
protected void btnSave_Click(object sender, ImageClickEventArgs e)
{
string value = String.Empty;
Control ctrl = this.MyControl;
if (ctrl is TextBox)
{
//I want here the value of 2 but I get 1 again
value = ((TextBox)ctrl).Text;
}
//Save operation into DB
}
-- 编辑 -----
正如 Dmytro Rudenko 之前所说,我唯一需要的是在加载事件中重新创建对象。不仅仅是 init 解决了我的问题。我不再需要视图状态了
protected override void OnLoad(EventArgs e)
{
Control ctrl = this.CreateControl();
this.placeHolder.Controls.Add(ctrl);
}
【问题讨论】:
标签: c# dynamic controls viewstate placeholder