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树是什么样子的。