我正在下拉选定的索引更改事件中生成动态文本框控件。
protected void ddlCategories_SelectedIndexChanged(object sender, EventArgs e)
{
foreach (Attributes attribute in getAllAttributes(Convert.ToInt32(ddlCategories.SelectedValue)))
{
Panel div = new Panel();
div.Attributes.Add("class", "form-group");
HtmlGenericControl lbl = new HtmlGenericControl("label");
lbl.Attributes.Add("class", "col-lg-2 control-label");
lbl.InnerText = attribute.Name;
Panel innerdiv = new Panel();
innerdiv.Attributes.Add("class", "col-lg-10");
TextBox txt = new TextBox();
txt.ID = attribute.ID.ToString();
txt.Attributes.Add("class", "form-control");
innerdiv.Controls.Add(txt);
div.Controls.Add(lbl);
div.Controls.Add(innerdiv);
CustomAttributes.Controls.Add(div);
}
}
现在用户填写表单中的值后,我想获取动态生成的控件的值。但是CustomAttributes.findControls("")
并不适合我。它一直都是null。
我也试过
var textBoxesInContainer = CustomAttributes.Controls.OfType<TextBox>();
但它也不起作用。
任何人都可以告诉我这里出了什么问题。
由于
答案 0 :(得分:1)
最后我在搜索问题后找到了原因。这个问题的问题是视图状态。
在asp.net中,当页面回发时,它会丢失动态生成的控件的视图状态。因此,为了解决这个问题,我在回发时重新创建了页面加载事件中的控件。以这种方式,控件将被添加回当前页面,我可以在点击事件的按钮中找到这些控件。
感谢您的所有时间和指导。
答案 1 :(得分:0)
Panel div = new Panel();
Panel innerdiv = new Panel();
TextBox txt = new TextBox();
innerdiv.Controls.Add(txt);
div.Controls.Add(innerdiv);
CustomAttributes.Controls.Add(div);
CustomAttributes
暂挂Panel
。
试试这个:
var textboxes = CustomAttributes.Controls.OfType<Panel>()
.Select(p => p.Controls.OfType<Panel>().First())
.Select(p => p.Controls.OfType<TextBox>().First())