我有一个表单,基于前一页中给出的答案,在字段组合中可以有大约10种不同的变体(大多数是相同的,但有几个变化)。我决定而不是制作10个单独的页面,我会尝试让它变得动态。最终这将从数据库中提取表单设置,但是现在我只是想让动态部分工作。以下代码有点起作用,但它给了我一个奇怪的结果。
private void AddTestControls()
{
var newbox = new TextBox();
newbox.ID = "FirstBox";
newbox.Text = "This is dynamic";
newbox.CssClass = "stepHeader";
DynamicDiv1.Controls.Add(newbox);
var newlit = new Literal();
newlit.ID = "FirstLit";
newlit.Text = ".<br/>.";
DynamicDiv1.Controls.Add(newlit);
newbox.ID = "SecondBox";
newbox.Text = "This is also dynamic";
newbox.CssClass = "step";
DynamicDiv1.Controls.Add(newbox);
}
我已经逐步完成了所有属性设置正确,但是当页面最终渲染时,只有SecondBox
控件可见。没有FirstBox
的痕迹。如果我更改它以便SecondBox
是它自己的对象(例如newebox2
)那么两者都是可见的,但是我认为我最终会从数据库中执行表单,这可能会使事情复杂化。我不明白为什么必须重新创建文本框对象才能将其添加到Div的控件集合中。我是不是错了,或者只是错过了某个地方的一步?
答案 0 :(得分:1)
你的“SecondBox”正在覆盖“FirstBox”newbox
,因为它仍然持有对它的引用。为第二个框创建一个新的TextBox
:
var newbox = new TextBox();
newbox.ID = "FirstBox";
newbox.Text = "This is dynamic";
newbox.CssClass = "stepHeader";
DynamicDiv1.Controls.Add(newbox);
var newlit = new Literal();
newlit.ID = "FirstLit";
newlit.Text = ".<br/>.";
DynamicDiv1.Controls.Add(newlit);
// Create a new TextBox
var secondBox = new TextBox();
secondBox.ID = "SecondBox";
secondBox.Text = "This is also dynamic";
secondBox.CssClass = "step";
DynamicDiv1.Controls.Add(secondBox);
我不太清楚为什么这会使事情复杂化,但你可以做的是创建一个创建文本框的方法,如果这更容易:
TextBox CreateTextBox(string id, string text, string cssClass)
{
var box = new TextBox();
box.ID = id;
box.Text = text;
box.CssClass = cssClass;
return box;
}
然后
var newBox = CreateTextBox("FirstBox", "This is dynamic", "stepHeader");
DynamicDiv1.Controls.Add(newBox);
答案 1 :(得分:0)