2

以下は私のhtmlコードです。メールのテキストボックスがあり、ログインボタンがあります。電子メール テキスト ボックスの必須フィールド バリデーターと正規表現バリデーターを追加しました。

問題は、メールのテキスト ボックス ブラウザーに何かを入力すると、自動提案にメールのリストが表示されることです。下矢印キーを使用してこれらの電子メールのいずれかを選択し、キーを入力すると、電子メールが適切な形式であっても、正規表現検証のエラー メッセージが表示されます。

<asp:RequiredFieldValidator ID="reqValUserName" runat="server" 
    ErrorMessage="Email is required!" 
    ControlToValidate="txtUserName"
    ValidationGroup="validateCredential"
    Display="Dynamic">
</asp:RequiredFieldValidator>
<asp:RegularExpressionValidator ID="regValUserName" runat="server" 
    ErrorMessage="Incorrect format!"
    ControlToValidate="txtUserName" 
    ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" 
    ValidationGroup="validateCredential"
    Display="Static">
</asp:RegularExpressionValidator>                 

     <asp:TextBox ID="txtUserName" runat="server"
           TabIndex="1" CssClass="inputCredential" MaxLength="60"
           AccessKey="E" 
           ValidationGroup="validateCredential">
     </asp:TextBox>

     <asp:Button ID="btnLogin" runat="server" CssClass="btnPrimary" 
           Text="Login" onclick="btnLogin_Click" 
           ValidationGroup="validateCredential"/>

ここに画像の説明を入力

この画像では、提案からメールを選択して Enter キーを押すと、間違ったメール検証メッセージが表示されます。

この種のメッセージ表示を停止する方法を教えてください。

質問に関して明確化が必要な場合は、コメントとして追加してください。

4

6 に答える 6

2

EnableClientValidation="false" 属性を正規表現バリデーターに追加して、他のバリデーターが渡された後にのみサーバー上の形式をチェックするようにすることができます。

または、次のアドバイスに従ってください。

バリデータが起動する順序は何によって決定されますか?

于 2012-08-03T20:20:48.427 に答える
1

電子メールテキストボックスの正規表現バリデーターも追加します

<asp:RegularExpressionValidator ID="regtxtPrimaryEmail" runat="server" ControlToValidate="txtEmailId"
                                            Display="Dynamic" CssClass="cssVal" ToolTip="Invalid email." ValidationGroup="registration"
                                            ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"></asp:RegularExpressionValidator>

その後、メール形式が正しくなるまで送信されません。

于 2012-07-31T05:51:56.053 に答える
1

いくつかのコントロールがautopostback="true"あり、これらのコントロールが更新パネルにあるようです。そうでない場合、できることは..すべての検証コントロールの表示プロパティを削除し、btnLogin_Clickイベント呼び出しValidate();メソッドで行います。

また、 MSDNのバリデーターの詳細についてもお読みください。

あなたはきっとあなたの答えを得るでしょう....

于 2012-08-02T12:54:34.980 に答える
1

すべての回答と提案に感謝します。以下は、すべての回答を確認した後に行ったことです。

<asp:RegularExpressionValidator ID="regValUserName" runat="server" 
     ErrorMessage="Incorrect format!"
     ControlToValidate="txtUserName" 
     ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" 
     ValidationGroup="validateCredential"
     Display="Dynamic" EnableClientScript="false">
</asp:RegularExpressionValidator>

ご覧のとおり、EnableClientScript="false" を追加して、電子メールの半分を入力し、自動提案から選択して Enter キーを押したときにエラー メッセージが表示されないようにしました。

問題は、サーバー側で検証を行っていたため、入力された資格情報が正しいかどうかを常にチェックしていたことです。そのため、不要なコードの実行とデータベースとのやり取りがありました。

そのため、ログインボタンのクリックイベントハンドラーで、次の変更を行いました。

if(Page.IsValid)
{
     // My credential check code
}

したがって、上記のコード ブロックは、入力された資格情報が適切な形式である場合にのみ、その正確性をチェックするためのコードを実行します。

しかし、私はまだより良い答えを探しています。これは単なる回避策です。パフォーマンスに関して言えば、サーバー側の検証はクライアント側の検証と決して一致しないからです。ここで私は使いやすさに妥協しています。間違った形式のメールを入力した直後にユーザーに通知したいので。これは JavaScript を使用して実現できますが、バリデータ コントロールを使用して実現できる方法はないかと考えています。

于 2012-08-04T06:21:14.137 に答える
0

これは、クライアント側の REV が部分的な入力を検証しているためです。たとえば、上の図では、REV は入力として "r" を検証しています。これを確認するために、

  1. メールアドレス全体を「rupeshn@aol.com」と入力 >>次に
  2. 下向き矢印 >> を使用して提案されたメールを選択します。
  3. エンターキーを押します。

今回はREVは文句を言いません。

解決策として: REV を JavaScript で実装します。エラー メッセージのテキスト ボックスの横にラベルを追加します。カーソルがテキスト ボックスを出るときに js を呼び出します。検証が失敗した場合は、js でラベルを見つけて、エラー メッセージを追加します。

于 2012-08-02T18:58:44.603 に答える