C# 如何获取所有web表单元素的值

C# 如何获取所有web表单元素的值,c#,.net,webforms,C#,.net,Webforms,我有一个简单的web表单,它由几个文本框和下拉列表组成。我需要一种方法来获取列表中所有元素的值。我知道我可以使用textbox1.value单独获取值,但我不知道表单中有多少textbox/dropdown。 比如说 <form id="form1" runat="server"> <div> Tier: <asp:DropDownList ID="Tier" runat="server">

我有一个简单的web表单,它由几个文本框和下拉列表组成。我需要一种方法来获取列表中所有元素的值。我知道我可以使用textbox1.value单独获取值,但我不知道表单中有多少textbox/dropdown。 比如说

<form id="form1" runat="server">
    <div>
        Tier: 
            <asp:DropDownList ID="Tier" runat="server">
                        <asp:ListItem>Select Tier</asp:ListItem>
                        <asp:ListItem>Tier1</asp:ListItem>
                        <asp:ListItem>Tire2</asp:ListItem>
                        <asp:ListItem>Tier3</asp:ListItem>
            </asp:DropDownList>

        Author: 
            <asp:DropDownList ID="Author" runat="server">
                        <asp:ListItem>Select Author</asp:ListItem>
                        <asp:ListItem>Author1</asp:ListItem>
                        <asp:ListItem>Author2</asp:ListItem>
                        <asp:ListItem>Author3</asp:ListItem>
            </asp:DropDownList>

        Quotation For:
            <asp:TextBox ID="questionfor" runat="server"></asp:TextBox>
    </div>

层:
选择层
第1层
轮胎2
三级
作者:
选择作者
作者1
作者2
作者3
报价如下:

如何获取列表中的值?我如何循环通过它们?最终目的是将元素Id及其值存储在数据库中。因此,除了值之外,我还需要id。例如,在数据库中,我将有两列elementName(即elementID)及其对应的值

这里有一些你可以尝试的东西

Protected void GetControlValues(ControlCollection  controls)
{
    var holdList = new List<string>();
    foreach(Control c in controls)
    {
        if(c is System.Web.UI.WebControls.TextBox)
        {
            holdList.Add(c.Text); //this will get the value of the TextBox 
        } 
        else if (c.controls.Count > 0)
        {
            GetControlValues(c.Controls)
        }
    }
}
受保护的无效GetControlValues(ControlCollection控件)
{
var holdList=新列表();
foreach(控件中的控件c)
{
if(c是System.Web.UI.WebControls.TextBox)
{
Add(c.Text);//这将获得文本框的值
} 
否则如果(c.controls.Count>0)
{
GetControlValues(c.Controls)
}
}
}

如果要获取ID值,可以选中
if(c.ID==textBoxId.ID)
然后将该textBoxId.Text添加到列表中如果知道要检查的控件类型,则可以在此foreach循环中进行多个if检查

你可以用几种方法来做这件事。。如果您了解Lambda的
。。或者你也可以用老式的方式,使用
foreach(Controls中的Control-ctrl)
检查typs是
DropDowList
还是TextBox..等等。。其实很简单递归在哪里?顺便说一句:没有控件的类型是
ListItem
。我将使用foreach编辑答案以显示递归(控件循环为什么只是dropdownlist?这也会处理textbox吗?或者其他任何元素,如复选框等?如果您使用
foreach(控件中的控件ctrl)检查类型,您需要为每个控件执行此操作。
如果(c是textbox),您需要使用
检查
例如..这很简单..我将进行编辑,并向您展示如何使用
文本框
,这样会更有意义