1

我有一个表单,根据前一页中给出的答案,字段组合可以有大约 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 的控件集合中。我是不是把这一切都搞错了,或者只是在某个地方错过了一步?

4

2 回答 2

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);
于 2012-11-30T23:44:33.920 回答
0

它应该如何工作。newbox1是一个参考,所以在它第一次添加到DynamicDiv1之后,它就在那里,如果你改变它Text,那么Text就会改变。您可能会发现这很有用。这个SO演示了您遇到的相同问题。

于 2012-11-30T23:46:43.997 回答