【发布时间】:2017-02-06 12:10:36
【问题描述】:
我有包含另一个子中继器的父中继器。 为简单起见,假设子转发器包含文本框和Requiredvalidator。
标记的简单示例:
<asp:Repeater ID="rpt1" runat="server">
<HeaderTemplate>
....
</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="lbl1" runat="server" CssClass=".."></asp:Label>
<div class="..">
<asp:Repeater ID="rpt2" runat="server">
<HeaderTemplate>
</HeaderTemplate>
<ItemTemplate>
<div class="...">
<asp:TextBox ID="txt21" runat="server" CssClass="..." MaxLength="7" CssClass="ErrorMessage" ErrorMessage="*" />
<asp:RequiredFieldValidator ID="rfv21" runat="server" CssClass="ErrorMessage" ErrorMessage="*" />
</div>
</ItemTemplate>
<FooterTemplate>
</FooterTemplate>
</asp:Repeater>
</div>
</ItemTemplate>
<FooterTemplate>
</FooterTemplate>
</asp:Repeater>
我创建了一个这样的方法来获取第二个转发器的RequiredField id:
function getId(){
var myId = document.getElementById('<%= rfv21.ClientID %>');
}
但当然没用,还有个例外:
The name control-name Does Not Exist in the Current Context
那我该怎么做呢?
我想提一下,我的业务需求是当 txt21 的 onchange、onkeyup、onkeydown 事件触发时,它将获得等效的 rfv21 并启用它:
我创建了这个方法来触发 onchange、onkeyup、onkeydown 事件发生变化:
function txt21_onChange(txtbox) {
var newValue = this.value;
var oldValue = this.oldvalue;
var myRfv2 = document.getElementById('<%= rfv2.ClientID %>');
if (newValue != oldValue) {
ValidatorEnable(myRfv2, true);
}
}
我将 txt21 更新为:
<asp:TextBox ID="txt21" runat="server" CssClass=".." MaxLength="7" onkeyup="javascript: txt21_onChange(this);this.oldvalue = this.value;" />
但是这条线需要工作:
var myRfv2 = document.getElementById('<%= rfv2.ClientID %>');
正如我之前解释的那样。
我认为 Item.FindControl(..) 可能会有所帮助,但在这种情况下我们如何使用它?
【问题讨论】:
-
会有很多很多
rfv21控件 - 每个父转发器行将有与其子转发器行一样多的数量。每个都会有一个生成的 id。你想访问一个特定的,还是同时访问所有的? -
我想在 txt21 onchange 触发时访问特定的 rfv21 我想访问它的 rfv21 以启用它
-
那么你需要相对于触发它的 txt 来访问它。你用jquery吗?使用它将是相当容易的任务
-
是的,我可以使用 JQuery 来完成这项任务
-
请查看我对问题的更新
标签: javascript c# asp.net webforms asp.net-controls