【发布时间】:2023-03-09 12:20:01
【问题描述】:
我创建一个在服务器上运行的DIV,然后动态创建TextBox 控件并将其添加到DIV。后来,当我尝试读取 DIV 中每个 TextBox 的 Text 属性时,我无法获取控件...
我该如何做到这一点?
在服务器上运行的 DIV...
<div id="divBonusPercents" runat="server"></div>
根据某些条件动态添加文本框...
foreach (ListItem item in lbTeamsEOM.Items)
if (item.Selected)
{
// add controls for team bonus %
TextBox tbPercent = new TextBox();
tbPercent.Text = "15%";
tbPercent.ID = "tbPercent" + item.Value;
divBonusPercents.Controls.Add(tbPercent);
}
获取DIV中每个TextBox的值
List<string> lBonusPercent = new List<string>();
foreach (Control c in divBonusPercents.Controls)
if (c.GetType() == typeof(TextBox))
lBonusPercent.Add(((TextBox)c).Text);
【问题讨论】:
-
在什么时候添加文本框?在初始 PageLoad 期间还是之后?
-
稍后在下一个向导步骤
-
那么我认为这不会起作用,尽管我不确定 NextWizardStep 何时发生(从未在 asp.net 中做过向导)。由于 asp.net 页面生命周期的要求,在 PageLoad 之后创建的控件非常棘手。更好的方法是在设计时对您可能想要的所有内容进行分类,并使它们不可见。然后根据需要使它们可见。
-
所以我唯一的选择是用大约 100 个文本框来膨胀 DOM,而在 95% 的时间里我可能只需要 3-6 个文本框?
-
一点也不。您可以使用回发 API 在 javascript 中执行此操作。我就是这样。您可以创建 TextBox01 到 TextBox10 并使用一些状态来计算它们在上下文中的含义(可能不是一个好主意)。你可以做很多事情。您还可以为向导的每个步骤使用单独的页面。选项继续...
标签: c# asp.net typeof dynamic-controls servercontrols