bre*_*njt 3 javascript asp.net
我在下面有我的设置.渲染页面时会抛出此错误:The name 'UserName' does not exist in the current context.我不明白为什么因为我的控制权就在电话会议之上.我在一个单独的控件中有相同的设置,它工作得很好.有谁能解释一下?
<asp:TextBox ID="UserName" runat="server" Width="136px"></asp:TextBox>
<asp:CustomValidator ID="cvUserNameOrEmailRequired" ValidationGroup="LoginForm"
runat="server" CssClass="input-error" ErrorMessage="Username is required"
ControlToValidate="UserName" Display="Dynamic"
ClientValidationFunction="UsernameValidateTextBox" ValidateEmptyText="True">
</asp:CustomValidator>
<script type="text/javascript">
function UsernameValidateTextBox(source, arguments) {
if (arguments.Value % 2 == 0) {
arguments.IsValid = false;
} else {
arguments.IsValid = true;
}
}
**//ERROR IS THROWN HERE**
$("#<%=UserName.ClientID %>").focus(function () {
$("#<%=cvUserNameOrEmailRequired.ClientID %>").css({ visibility: "hidden" });
});
</script>
Run Code Online (Sandbox Code Playgroud)
UPDATE
如果我删除此调用:$("#<%=UserName.ClientID %>").focus(function () {然后我得到相同的错误<%=cvUserNameOrEmailRequired.ClientID %>
上面的代码位于<asp:Login> 标记内,将其放在外面可以删除错误.
UPDATE
我把jQuery代码移到了外面,<asp:Login>错误就消失了.我用了:
$('#<%=LoginForm.FindControl("UserName").ClientID%>').focus(function () {
$('#<%=LoginForm.FindControl("cvUserNameOrEmailRequired").ClientID%>')
.css({ visibility: "hidden" });
});
Run Code Online (Sandbox Code Playgroud)
没问题.但为什么它不能在<asp:Login>标签内工作?
该Login控制等像Repeaters和GridViews,使用的模板.这会将那些模板标记中的控件(如Logins <LayoutTemplate>)从Page.Controls列表中取出,并将它们放入Login标记Controls列表中.因此,您需要在Login控件列表中引用控件.
此代码使用FindControl()迭代控件的所有直接子节点的方法,按名称查找ID.下面的完整代码显式地将其强制转换为目标类型,但是Control如果它更容易,则可以转换为更通用的,因为您只获取了ClientID属性:
((Control)Login1.FindControl("UserName")).ClientID
此外,该Login控件有点特殊,因为它期望某些控件具有特定的ID,因此它不会呈现文本的客户端JavaScript代码Login LayoutTemplate.因此,将文字<script>标记移到模板之外.这当然没有解决参考问题,所以你仍然必须得到对子控件的引用FindControl().
<asp:Login ID="Login1" runat="server">
<LayoutTemplate>
<asp:TextBox ID="Password" runat="server" Width="136px"></asp:TextBox>
<asp:TextBox ID="UserName" runat="server" Width="136px"></asp:TextBox>
<asp:CustomValidator ID="cvUserNameOrEmailRequired" ValidationGroup="LoginForm" runat="server"
CssClass="input-error" ErrorMessage="Username is required" ControlToValidate="UserName"
Display="Dynamic" ClientValidationFunction="UsernameValidateTextBox" ValidateEmptyText="True">
</asp:CustomValidator>
</LayoutTemplate>
</asp:Login>
<script type="text/javascript">
function UsernameValidateTextBox(source, arguments) {
if (arguments.Value % 2 == 0) {
arguments.IsValid = false;
} else {
arguments.IsValid = true;
}
}
$("#<%= ((TextBox)Login1.FindControl("UserName")).ClientID %>").focus(function () {
$("#<%=((CustomValidator)Login1.FindControl("cvUserNameOrEmailRequired")).ClientID %>").css({ visibility: "hidden" });
});
</script>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1948 次 |
| 最近记录: |