Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从动态添加的文本框中获取值_C#_Asp.net_Dynamic - Fatal编程技术网

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” ?