如何以编程方式将元素/控件类型与ASP.NET Request.Form键/值集合区分开来?

如何以编程方式将元素/控件类型与ASP.NET Request.Form键/值集合区分开来?,asp.net,post,webforms,request-object,Asp.net,Post,Webforms,Request Object,我有一个简单的ASP.NET web表单,如下所示: <form id="form1" runat="server"> <asp:TextBox ID="txt" runat="server"></asp:TextBox> <asp:DropDownList ID="ddl" runat="server"> <asp:ListItem Text="X" Value="X"></asp:ListIte

我有一个简单的ASP.NET web表单,如下所示:

<form id="form1" runat="server">
    <asp:TextBox ID="txt" runat="server"></asp:TextBox>
    <asp:DropDownList ID="ddl" runat="server">
        <asp:ListItem Text="X" Value="X"></asp:ListItem>
        <asp:ListItem Text="Y" Value="Y"></asp:ListItem>
        <asp:ListItem Text="Z" Value="Z"></asp:ListItem>
    </asp:DropDownList>
    <asp:Button ID="btn" runat="server" Text="Button" />
</form>
如何区分按钮(btn)与文本框值(txt)或下拉列表值(ddl)?还是我需要想出一个命名约定?我正在尝试迭代Request.Form对象,并将表单值保存到哈希表中供以后使用


谢谢。

你不能。对于服务器来说,它只是一个简单的名称:值集合

为什么不让框架为您解决这个问题

在codebehind中,您可以通过其属性检索值:

ddl.SelectedText
txt.Text

区分各种Request.Form字段的方法是将字段名与控件名相关联——这正是每个控件所做的

每个控件都知道自己的ID。在初始化阶段,每个控件根据Request.Form和ViewState设置或恢复其状态

对于动态创建的控件,如果您在Init阶段之前创建控件并将其添加到控件树中(例如在OnPreInit事件处理程序中),框架将为您处理此问题


如果你想自己做,你可以通过遍历控制树来模拟这个过程。

那么定制命名约定是一种方法吗?你可以,但那将是重新发明轮子。ASP.Net已经这样做了。因为html控件是动态呈现的,所以我只想收集发布的值并保存到哈希表中。如果您使用txt.Text,ASP.NET只需像Request.Form[“txt”]一样进行查找,就可以得到我相信的值。
ddl.SelectedText
txt.Text