asp.net:如何使用javascript或jquery访问repeater生成的元素?
我用的是母版页和转发器。我需要实现对所需字段验证器的选择性使用。当选择“是”(即ID为“rblMayContact”的RadioButtonList中值为“0”的列表项)时,应启用(激活)ID为“rfvSupervisorName”的RequiredFieldValidator。否则,应禁用所需的FieldValidator 简化代码:asp.net:如何使用javascript或jquery访问repeater生成的元素?,javascript,jquery,asp.net,repeater,Javascript,Jquery,Asp.net,Repeater,我用的是母版页和转发器。我需要实现对所需字段验证器的选择性使用。当选择“是”(即ID为“rblMayContact”的RadioButtonList中值为“0”的列表项)时,应启用(激活)ID为“rfvSupervisorName”的RequiredFieldValidator。否则,应禁用所需的FieldValidator 简化代码: <asp:Repeater ID="repEmploymentHistory" runat="server" Visible="True" OnItemC
<asp:Repeater ID="repEmploymentHistory" runat="server" Visible="True" OnItemCommand="repEmploymentHistory_ItemCommand"
OnItemDataBound="repEmploymentHistory_ItemDataBound" OnDataBinding="repEmploymentHistory_DataBinding">
<ItemTemplate>
<table id="tblEmploymentHistory" class="table bordered">
<tr>
<td>
Supervisor Name<br />
<asp:Label ID="lblSupervisorName" runat="server" CssClass="underlined bold"><%# DataBinder.Eval(Container.DataItem, "SupervisorName")%></asp:Label>
<asp:TextBox ID="txtSupervisorName" runat="server" Visible="false" MaxLength="50"></asp:TextBox>
<asp:RequiredFieldValidator ID="rfvSupervisorName" runat="server" ControlToValidate="txtSupervisorName"
EnableClientScript="true" ValidationGroup="EditEmploymentHistoryGroup" ErrorMessage="Required."
CssClass="field-validation-error" />
<asp:RegularExpressionValidator ID="revSupervisorName" runat="server" ControlToValidate="txtSupervisorName"
ValidationGroup="EditEmploymentHistoryGroup" ValidationExpression="^[-a-zA-Z'.\s]{1,50}$"
ErrorMessage="Enter a valid name." CssClass="field-validation-error" />
</td>
</tr>
<tr>
<td>
<asp:Label ID="lblContactQuestion" runat="server" Text="May we contact this employer? (If no, please explain)">May we contact this employer?</asp:Label>
<asp:Label ID="lblContactAnswer" runat="server" CssClass="underlined bold"><%#(String.IsNullOrEmpty(DataBinder.Eval(Container.DataItem, "ContactEmployer").ToString())) ? String.Empty : (bool)DataBinder.Eval(Container.DataItem, "ContactEmployer") ? "Yes" : "No" %></asp:Label>
<asp:RadioButtonList ID="rblMayContact" runat="server" RepeatDirection="Horizontal"
RepeatLayout="Flow" AutoPostBack="False" Visible="false" >
<asp:ListItem Value="0" onclick="ValidateSupervisor(this);return false;"> Yes </asp:ListItem>
<asp:ListItem Value="1"> No </asp:ListItem>
</asp:RadioButtonList>
<asp:Label ID="lblNoContactReason" runat="server" CssClass="underlined bold"><%#(String.IsNullOrEmpty(DataBinder.Eval(Container.DataItem, "ReasonNotContacting").ToString())) ? String.Empty : DataBinder.Eval(Container.DataItem, "ReasonNotContacting") %></asp:Label>
<asp:TextBox ID="txtNoContactReason" runat="server" MaxLength="200" Visible="false"></asp:TextBox>
</td>
</tr>
</table>
</ItemTemplate>
主管姓名
我们可以联系这位雇主吗?
对
不
困难在于访问重复项的元素,因为每个元素都有索引前缀
因此,使用javascript或jquery,如何仅在选择特定单选按钮时启用与文本框相关的所需字段验证器?在中继器的ItemDataBound中尝试以下方法:
protected void repEmploymentHistory_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
var rblMayContact = e.Item.FindControl("rblMayContact") as RadioButtonList;
var rfvSupervisorName = e.Item.FindControl("rfvSupervisorName") as RequiredFieldValidator;
var revSupervisorName = e.Item.FindControl("revSupervisorName") as RegularExpressionValidator;
if (rfvSupervisorName != null && revSupervisorName != null)
{
revSupervisorName.Enabled = rfvSupervisorName.Enabled = rblMayContact != null && rblMayContact.SelectedIndex >= 0;
}
}
}
并将RadioButtonList的“AutoPostBack”属性添加为true:
<asp:RadioButtonList runat="server" AutoPostBack="True">
...
</asp:RadioButtonList>
...
这样,每次更改RadioButtonList时,它都会发回页面,中继器的ItemDataBound会启用/禁用验证程序控件。在服务器端(C#)中,您可以比javascript或jquery更轻松地做到这一点