C# 从动态添加的文本框中获取值
我的数据库中有两个表:C# 从动态添加的文本框中获取值,c#,asp.net,dynamic,C#,Asp.net,Dynamic,我的数据库中有两个表:问题和答案。一个问题的本质是一个或多个答案。我试图动态添加答案文本框。用户可以添加任意数量的所需答案。为此,我在divs中使用了panel:div1得到panel1,div2得到panel2,以此类推 在面板中,我动态添加了文本框,并给出了它们的id数字,比如txtAnswer1和txtAnswer2。当我按下提交按钮时,我想打开这个txtboxs并获取它们的值,但是如何呢 我尝试过这个解决方案,但我做不到 这是设计视图: <form id="form1"
问题
和答案
。一个问题的本质是一个或多个答案。我试图动态添加答案文本框。用户可以添加任意数量的所需答案。为此,我在divs中使用了panel:div1得到panel1,div2得到panel2,以此类推
在面板中,我动态添加了文本框,并给出了它们的id数字,比如txtAnswer1和txtAnswer2。当我按下提交按钮时,我想打开这个txtboxs并获取它们的值,但是如何呢
我尝试过这个解决方案,但我做不到
这是设计视图:
<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>
我的问题是怎么做
如你所见,我有3个面板和3个不同的文本框。这就是我试图找到答案的地方
我尝试在面板数组中添加面板,但仍然无法获取文本框值:(
我不知道我有什么问题,但当我按下add按钮时,我可以添加文本框,但它们只是html文本框。我的意思是它们是
。当我试图运行你的代码时,异常被处理并将我踢出foreach循环。我猜输入没有服务器标记。如果这是问题,我如何使它们“runat=”server“
我是否必须添加文本框值ViewState,如果是。如何添加?尝试在答案文本框周围使用面板,并确保您具有runat=“server”您知道ID。然后您可以查看该面板的子控件,查看该控件是否为Textbox类型。如果为,则从text属性获取答案 psuedo代码:
panel pnl = findpanel("mypanel");
foreach (control ctrl in pnl.controls)
{
if (ctrl is TextBox)
{
//get the text property value here
}
}
尝试在回答文本框周围使用一个面板,确保您拥有runat=“server”并且知道ID。然后,您可以查看该面板的子控件,并查看该控件是否为Textbox类型。如果是,则从text属性获取答案 psuedo代码:
panel pnl = findpanel("mypanel");
foreach (control ctrl in pnl.controls)
{
if (ctrl is TextBox)
{
//get the text property value here
}
}
要从
面板
内动态添加的文本框
中检索值,您需要遍历面板
内的所有文本框
控件,如下所示:
Control answerPanel = Page.FindControl("AnswerPanelID");
foreach( Control childControl in answerPanel.Controls )
{
if( childControl is TextBox )
{
//Retrieve and store value from childControl.Text
}
}
使用此方法,您不必担心按单个ID检索控件。如果要搜索具有特定ID的控件,请使用Page.FindControl()
方法
根据您编辑的解释:
代码只需要稍微调整一下。你在面板控件数组中循环,这是正确的。不正确的是,你试图获取值的方式
lblValues.Text = pnlIn.Controls.ToString()
不起作用。相反,它应该是:
protected void btnGetValues_Click(object sender, EventArgs e)
{
Panel[] pnls = new Panel[3] { pnlAns, pnlA, pnlJ };
ArrayList answers = new ArrayList();
//Alternatively....
System.Collections.Hashtable ht = new System.Collections.Hashtable();
foreach (Panel pnlIn in pnls)
{
foreach( Control childControl in pnlIn.Controls )
{
if( childControl is TextBox )
{
TextBox box = (TextBox)childControl;
//Retrieve and store value from childControl.Text
answers.Add(box.Text);
//Alternatively...
ht.Add( box.ID, box.Text );
}
}
}
}
最后,您将拥有
ArrayList
(或HashTable
,由TextBox
的ID索引)面板中所有文本框的值。如果面板中同时包含问题和答案,则您的If语句必须检查ID是否包含“答案”或者不。要从面板中动态添加的文本框
中检索值,您需要遍历面板
中的所有文本框
控件,如下所示:
Control answerPanel = Page.FindControl("AnswerPanelID");
foreach( Control childControl in answerPanel.Controls )
{
if( childControl is TextBox )
{
//Retrieve and store value from childControl.Text
}
}
使用此方法,您不必担心按单个ID检索控件。如果要搜索具有特定ID的控件,请使用Page.FindControl()
方法
根据您编辑的解释:
代码只需要稍微调整一下。你在面板控件数组中循环,这是正确的。不正确的是,你试图获取值的方式
lblValues.Text = pnlIn.Controls.ToString()
不起作用。相反,它应该是:
protected void btnGetValues_Click(object sender, EventArgs e)
{
Panel[] pnls = new Panel[3] { pnlAns, pnlA, pnlJ };
ArrayList answers = new ArrayList();
//Alternatively....
System.Collections.Hashtable ht = new System.Collections.Hashtable();
foreach (Panel pnlIn in pnls)
{
foreach( Control childControl in pnlIn.Controls )
{
if( childControl is TextBox )
{
TextBox box = (TextBox)childControl;
//Retrieve and store value from childControl.Text
answers.Add(box.Text);
//Alternatively...
ht.Add( box.ID, box.Text );
}
}
}
}
最后,您将拥有ArrayList
(或HashTable
,由TextBox
的ID索引)面板中所有文本框的值。如果面板中同时包含问题和答案,则您的If语句必须检查ID是否包含“答案”或者不是。你是在问如何从动态添加的文本框中获取值吗?你是在问如何从动态添加的文本框中获取值吗?请查看我对答案的更改。我不知道我有什么问题,但当我按“添加”按钮时,我可以添加文本框,但它们只是html文本框。我的意思是,它们是我尝试运行您的代码异常处理并将我踢出foreach循环。我猜输入没有服务器标记。如果这是问题所在,我如何使它们运行at=“server”?查看我对答案的更改。我不知道我有什么问题,但当我按下“添加”按钮时,我可以添加文本框,但它们只是html文本框。我的意思是它们是。当我尝试运行您的代码时,异常被处理并将我踢出foreach循环。我猜输入没有服务器标记。如果这是问题,我如何使它们运行at=“server” ?