2012-10-03 82 views
1

我開始編寫網站,目前我正在創建用戶創建頁面。所有的驗證都可以正常工作,但我不確定要將哪些內容放入checkUsername方法以驗證用戶名是否已經存在。以下是我的ASP.NET代碼。檢查以查看用戶名是否存在

<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> 

這是我的代碼背後:

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); 
       } 
      } 
    } 
} 

當我運行代碼,我收到以下錯誤信息:

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?) 

不知道我要去的地方錯了。我有使用System.Data.SqlClient;在代碼後面,並且還添加了對system.data.dll的引用。

任何幫助,將不勝感激!

回答

5

自定義驗證方法都需要下面的方法簽名:

void checkUsername(object source, ServerValidateEventArgs args) 

傳遞用戶名作爲一個字符串代替,該ServerValidateEventArgs將具有價值。

,而不是返回true或false驗證和使用此:

args.IsValid = true; 

有關更多信息,請參閱使用CustomValidators本網頁:http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.customvalidator.onservervalidate(v=vs.80).aspx

+0

是的,就是這樣,謝謝。感謝您的鏈接。 – Trido

1

試着做,而不是private方法public。您的ASPX頁面正在嘗試訪問它,但它是private

+2

保護將是更好的做法,因爲這些方法永遠不會在該頁面之外使用。 –

+1

確實如此,但不是太擔心,因爲它是一個網站。但是,是的,'protected'將是可以用於此的最嚴格的訪問修飾符。 – Gromer