2016-11-05 203 views
0

我現在正在嘗試使用.NETC#驗證服務器端

這裏是我的客戶端代碼,以驗證在服務器端密碼的密碼:

    <asp:TextBox ID="PSWRD" runat="server" Width="120px"></asp:TextBox> 
        <span style="background-color:yellow; color:red; font-weight:bold;" title="some rules">Password Rules</span> 

        <asp:RequiredFieldValidator ID="VPSWRD" runat="server" 
         ErrorMessage="A password is required" 
         ControlToValidate="PSWRD"> 
         </asp:RequiredFieldValidator> 

        <asp:CustomValidator ID="IPSWRDVal" runat="server" 
         OnServerValidate="ValidatePasswordServerSide" 
         ControlToValidate="PSWRD" 
         ErrorMessage="Please enter a *valid* password" 
         ValidateEmptyText="False" 
         ></asp:CustomValidator> 

我的第一個驗證器工作正常。它在適當時顯示它的消息。

第二個給我麻煩。

這裏的背後

protected void ValidatePasswordServerSide(object source, ServerValidateEventArgs args) 
{ 


     if (Regex.IsMatch(args.Value, @"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$")) 
      args.IsValid = true; 
     else 
      args.IsValid = false; 


} 

我的代碼的問題是,我無論何時我進入一個不正確的值還沒看到我的第二確認錯誤消息顯示。

還有點懇求,在人們對他們的解決方案太具異國情調之前,請注意這是一個學校任務,所以他們想要一個餅乾切割器的方法。我知道,這是愚蠢的,但規則是規則。

+0

確實沒有必要在您的方法名稱中包含「ServierSide」這個短語。代碼根據定義在服務器端。 –

+0

您是否在'Regex.IsMatch'上調試過該函數是否被調用,如果是,則表達式是否匹配。 –

+0

我現在看到。我曾嘗試調試過,但我的頁面中還有其他字段帶有驗證器。我把它們留爲空白,因此它們的驗證器會首先絆倒假,而我的服務器端代碼將永遠不會執行。我現在感到很傻。 –

回答

0

爲驗證密碼驗證呼叫服務器端方法不好。

使用

<asp:RegularExpressionValidator runat="server" ID="rgpassvalide" ErrorMessage="Please enter a *valid* password" ControlToValidate="PSWRD" ValidationExpression="^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$"></asp:RegularExpressionValidator> 

insted的的 「ASP:的CustomValidator」。

上面的代碼可以幫助你使它工作。