Reputation: 545
I am beginning work on coding a site and at the moment I am doing a user creation page. All the validation works fine, but I am unsure what to put into the checkUsername method in order to verify that the username does not already exist. Below is my ASP.NET code.
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<p>
<asp:ValidationSummary ID="ValidationSummary1" runat="server" HeaderText="There were errors on the page:" />
</p>
<p>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="username" ErrorMessage="Username is required."> *</asp:RequiredFieldValidator>
Enter Username <asp:TextBox ID="username" runat="server"></asp:TextBox>
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ControlToValidate="username" ErrorMessage="Username must be 4-10 letters or numbers." ValidationExpression="[a-zA-Z0-9]{4,10}" />
<asp:CustomValidator ID="CustomValidator1" runat="server" controltovalidate="username" errormessage="Username is already in use." OnServerValidate="checkUsername" />
</p>
<p>
Enter Password <asp:TextBox ID="entPWD" runat="server" TextMode="Password"></asp:TextBox>
<asp:RegularExpressionValidator ID="RegularExpressionValidator2" runat="server" display="dynamic" ControlToValidate="entPWD" ErrorMessage="Password must contain one of the following: @#$%^&*/." ValidationExpression=".*[@#$%^&*/].*" />
<asp:RegularExpressionValidator ID="RegularExpressionValidator3" runat="server" display="dynamic" ControlToValidate="entPWD" ErrorMessage="Password must be 6-12 characters." ValidationExpression="[^\s]{6,12}" />
</p>
<p>
Confirm Password <asp:TextBox ID="confPWD" runat="server" TextMode="Password"></asp:TextBox>
<asp:CompareValidator ID="CompareValidator1" runat="server" ControlToValidate="entPWD" ControlToCompare="confPWD" ErrorMessage="Passwords do not match." />
</p>
<asp:Button type="submit" ID="Button1" runat="server" Text="Submit" />
</asp:Content>
And this is my Code Behind:
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
private bool checkUsername(string username)
{
string connString = "Data Source=serveraddress;Initial Catalog=database;User Id=username;Password=password;";
string cmdText = "SELECT COUNT(*) FROM igs_users WHERE username = @username";
using(SqlConnection conn = new SqlConnection(connString))
{
conn.Open();
using(SqlCommand cmd = new SqlCommand(cmdText, conn))
{
cmd.Parameters.AddWithValue("@username", username);
int count = (int)cmd.ExecuteScalar();
return (count > 0);
}
}
}
}
When I run the code, I get the following error message:
Compiler Error Message: CS1061: 'ASP.default_aspx' does not contain a definition for 'checkUsername' and no extension method 'checkUsername' accepting a first argument of type 'ASP.default_aspx' could be found (are you missing a using directive or an assembly reference?)
Not sure where I am going wrong. I have using System.Data.SqlClient; in the Code Behind and also added a reference to system.data.dll.
Any help would be appreciated!
Upvotes: 1
Views: 2820
Reputation: 9931
Try making the method public
instead of private
. Your ASPX page is trying to access it, but it is private
.
Upvotes: 1
Reputation: 14233
Custom validation methods need the following method signature:
void checkUsername(object source, ServerValidateEventArgs args)
Instead of passing the username in as a string, the ServerValidateEventArgs will have the value.
And instead of returning true or false for validation, use this:
args.IsValid = true;
See this page for more information on using CustomValidators: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.customvalidator.onservervalidate(v=vs.80).aspx
Upvotes: 5