繁体   English   中英

动态创建ASP.NET表单控件

[英]Dynamically creating ASP.NET form controls

我有一个表格,根据上一页给出的答案,该表格在字段组合中可以有大约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的控件集合中。 我要解决所有这些错误,还是只是在某个地方错过了一步?

您的“ 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);

它应该如何工作。 newbox1是一个引用,因此在第一次将其添加到DynamicDiv1 ,就可以使用它,并且如果您更改其Text ,则Text也将被更改。 你会发现这个SO有用。 SO演示功能您有同样的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM