Asp.net 如何从中继器中的控件获取数据

Asp.net 如何从中继器中的控件获取数据,asp.net,repeater,Asp.net,Repeater,我有一个带有项目模板的转发器: <asp:Repeater ID="queryParametersRepeater" runat="server" DataSourceID="queryParametersObjectDataSource"> <ItemTemplate> <tr class="itemTemplate"> <td class="labelTd" style="width: 300px;">

我有一个带有项目模板的转发器:

<asp:Repeater ID="queryParametersRepeater" runat="server" 
  DataSourceID="queryParametersObjectDataSource">
  <ItemTemplate>
    <tr class="itemTemplate">
      <td class="labelTd" style="width: 300px;">
        <asp:HiddenField runat="server" Value='<%# Eval("ParameterType") %>' />
        Define <%# Eval("ParameterName") %> (type <%# Eval("ParameterType") %>)
      </td>                        
      <td class="valueTd">                            
        <asp:TextBox runat="server" Width="300px" Text='<%# Eval("ParameterName") %>' />
        <asp:CheckBox runat="server" Width="300px" />
      </td>
    </tr>
  </ItemTemplate>                
</asp:Repeater>

定义(类型)
在jQuery中,我更改了textBox和chekBox的显示属性。如何从这些控件获取数据


我无法使用
FindControls()
函数,因为我不知道控件的id。

您可以使用id和findcontrol来获取值。以下是一个工作示例:

<%@ Page Language="C#" %>
<%@ Import Namespace="System.Collections.Generic" %>

<script runat="server">

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            //bind the data source
            RepeaterExample.DataSource = new List<KeyValuePair<int, string>>{
                new KeyValuePair<int,  string>(1, "Test1"), 
                new KeyValuePair<int,  string>(2, "Test2"), 
                new KeyValuePair<int,  string>(3, "Test3")
            };
            RepeaterExample.DataBind();
        }

    }

    protected void cmdSubmit_Click(object sender, EventArgs e)
    {
            //read the values and output them
            litResults.Text = "";
            foreach (RepeaterItem i in RepeaterExample.Items)
            {

                TextBox txtExample = (TextBox)i.FindControl("txtExample");
                if (txtExample != null)
                {
                    litResults.Text += txtExample.Text + "<br />";
                }
            }
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
    </head>
    <body>
        <form id="form1" runat="server">
            <div>
                <asp:Repeater ID="RepeaterExample" runat="server">
                    <HeaderTemplate>
                        test</HeaderTemplate>
                    <ItemTemplate>
                        <asp:TextBox ID="txtExample" runat="server" Text='<%#Eval("Value") %>'></asp:TextBox>
                    </ItemTemplate>
                </asp:Repeater><br />
                <asp:Button ID="cmdSubmit" runat="server" Text="Submit" OnClick="cmdSubmit_Click" />
                <br />
                <asp:Literal ID="litResults" runat="server"></asp:Literal>
            </div>
        </form>
    </body>
</html>

受保护的无效页面加载(对象发送方、事件参数e)
{
如果(!IsPostBack)
{
//绑定数据源
RepeaterExample.DataSource=新列表{
新的KeyValuePair(1,“测试1”),
新的KeyValuePair(2,“Test2”),
新的KeyValuePair(3,“Test3”)
};
RepeaterExample.DataBind();
}
}
受保护的void cmdSubmit\u单击(对象发送方,事件参数e)
{
//读取值并输出它们
litResults.Text=“”;
foreach(RepeaterExample.Items中的RepeaterItem i)
{
TextBox txtExample=(TextBox)i.FindControl(“txtExample”);
if(txtExample!=null)
{
litResults.Text+=txtExample.Text+“
”; } } } 测试


您可以将类添加到控件中吗?
如果是这样,您可以尝试使用
$(“.givenClass”)。

正如@Chris所建议的,您必须拥有控件的ID,以便在服务器端代码中引用它。然后,您必须在正确的命名容器上使用带有该ID的
FindControl
。在中继器的情况下,每个中继器项目将作为命名容器。是的,这是工作…非常感谢。在回答之前,我也使用findcontrol(),但我使用jquery动态添加id,它不起作用,但我无法检测什么控件是可见的,复选框或文本框您如何设置可见性。如果您使用.Visible属性服务器端进行设置,以便不呈现控件,那么您应该能够检查属性值。@Alex,如果您使用jQuery设置控件的ID,则只有客户端知道ID;服务器不会。我认为
FindControl
不知道用户的DOM树是什么样子的。