我通过单击 LinkButton 在页面中创建动态文本框。
但是,之后,如果提交页面,我找不到动态创建的项目,因此无法将信息发送到数据库。
protected void lbAddTag_Click(object sender, EventArgs e)
{
for (int i = 0; i < 3;i++ )
{
CreateTextBox("txtTag-" + i.ToString());
}
}
private void CreateTextBox(string ID)
{
TextBox txt = new TextBox();
txt.ID = ID;
txt.Width = Unit.Pixel(300);
//txt.TextChanged += new EventHandler(OnTextChanged);
txt.AutoPostBack = false;
tagsPanel.Controls.Add(txt);
Literal lt = new Literal();
lt.Text = "<br /><br />";
tagsPanel.Controls.Add(lt);
}
如果我输入:
foreach (Control c in tagsPanel.Controls)
{
if (c is TextBox)
{
lblError.Text += c.ClientID + " , ";
}
}
在 lbAddTag_Click 方法中,我可以看到这些项目,并且它们存在,但是如果我提交页面并尝试在数据库中插入值,则什么也没有...
非常感谢任何提示。
最佳答案
如果动态创建控件,它们不会在提交时保留到控件层次结构/ View 状态中。
查看这篇文章:https://web.archive.org/web/20210330142645/http://www.4guysfromrolla.com/articles/092904-1.aspx
我宁愿有一个中继器控件,然后在 session 中维护一个 ArrayList 并将其用作中继器控件的数据源。当我想添加一行时,我宁愿在 session 中向 ArrayList 添加一行并重新绑定(bind)转发器控件。 如果您需要示例,请告诉我。
关于c# - 单击 LinkButton 上的动态文本框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4630095/