Control Does Not Exist. Why?
Solution 1:
The Login
control, among others like Repeaters
and GridViews
, use templates. This takes the controls in those template tags, like the Login
's <LayoutTemplate>
, out of the Page.Controls
list, and puts them in the Login
tag's Controls
list. So you need a reference to the control within the Login
control's list.
This code uses the FindControl()
method which iterates through all the direct children of the control looking for an ID by name. The full code below explicitly casts it to the target type, but you could cast to the more generic Control
if it would be easier since you're only getting the ClientID property:
((Control)Login1.FindControl("UserName")).ClientID
Also, the Login
control is a little special in that it expects certain controls with specific IDs, so it won't render the literal, client-side JavaScript code in the Login
LayoutTemplate
. So move the literal <script>
tag outside of the template. This doesn't solve the reference problem of course, so you still must get a reference to the child control with 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>
Post a Comment for "Control Does Not Exist. Why?"