我的数据库中有两个表:Question
和Answers
. 一个问题因其性质而得到 1 个或多个答案。我试图动态添加答案文本框。用户可以根据需要添加任意数量的所需答案。为此,我在 div 中使用了面板:div1 获取 panel1,div2 获取 panel2 等等。
在面板中,我有动态添加的文本框,并给出了它们的 id 数字,例如 txtAnswer1 和 txtAnswer2。当我按下提交按钮时,我想打开这个 txtboxes 并获取它们的值但是如何?
我尝试了这个链接解决方案,但我做不到。
http://learning2code.net/Learn/2009/8/12/Adding-Controls-to-an-ASPNET-form-Dynamically.aspx
这是设计视图:
<form id="form1" runat="server">
<div>
<asp:TextBox ID="txtCount" runat="server"></asp:TextBox>
<asp:Button ID="btnAdd" runat="server" Text="Add" OnClick="btnAdd_Click" />
</div>
<div style="border: medium solid #000000;">
<asp:Panel ID="pnlAns" runat="server"></asp:Panel>
</div>
<div style="border: medium solid #000099;">
<asp:Panel ID="pnlJ" runat="server"></asp:Panel>
</div>
<div style="border: medium solid #000000;">
<asp:Panel ID="pnlA" runat="server"></asp:Panel>
</div>
<div>
<asp:Button ID="btnGetValues" runat="server" Text="Get Values" OnClick="btnGetValues_Click" />
<br />
<asp:Label ID="lblValues" runat="server" />
</div>
</form>
这是后面的代码:
protected void btnAdd_Click(object sender, EventArgs e)
{
int count = Convert.ToInt32(txtCount.Text);
for (int i = 0; i < count; i++)
{
TextBox txt = new TextBox { ID = "txtAns" + i.ToString() };
pnlAns.Controls.Add(txt);
TextBox txtA = new TextBox { ID = "txtPoint" + i.ToString() };
pnlA.Controls.Add(txtA);
TextBox txtJ = new TextBox { ID = "txtOther" + i.ToString() };
pnlJ.Controls.Add(txtJ);
}
}
使用我的代码控件添加输入。
我想在按钮单击中获取输入值。
protected void btnGetValues_Click(object sender, EventArgs e)
{
}
我的问题是如何?
如您所见,我有 3 个面板和 3 个不同的文本框。那就是我试图找出答案的地方。
我尝试在面板数组中添加面板,但仍然无法获取文本框值。:(
protected void btnGetValues_Click(object sender, EventArgs e)
{
Panel[] pnls = new Panel[3] { pnlAns, pnlA, pnlJ };
foreach (Panel pnlIn in pnls)
{
lblValues.Text = pnlIn.Controls.ToString();
}
}
我不知道我有什么问题,但是当我按下添加按钮时,我可以添加文本框,但它们只是 html 文本框。我的意思是他们是<input name="txtOther0" type="text" id="txtOther0" />
。当我尝试运行您处理的代码异常并将我踢出 foreach 循环时。我猜输入没有服务器标签。如果这是问题,我怎样才能让它们成为'runat="server"'?
我是否必须添加文本框值 ViewState,如果它是。如何?