0

ユーザー登録の時点で電子メールがデータベースに既に存在するかどうかを確認するための customvalidator を作成しようとしています。customvalidators を扱う同様の質問をたくさん見てきましたが、何の回答も得られませんでした。

OnServerValidate メソッドを単純化して、常に false を返してあらゆる種類の応答を取得しましたが、応答がありません。メソッドが起動されることはないと思います。イベントのトリガーに影響を与えている他の問題があるという結論に達しました。

これは、マスター ページ内の contentplaceholder 内にある ASP です。マスター ファイルには scriptmanager もあります。

<%--メールを送信してメールを確認--%>

                        <td>
                            <ajaxToolkit:TextBoxWatermarkExtender ID="WatermarkEmail" runat="server" TargetControlID="Email" WatermarkText="Email" WatermarkCssClass="watermarked roundedcorner" />
                            <asp:TextBox ID="Email" runat="server" Columns="48" CssClass="roundedcorner"></asp:TextBox>
                            <asp:RequiredFieldValidator ID="EmailRequired" runat="server" ControlToValidate="Email" ErrorMessage="E-mail is required." ToolTip="E-mail is required." ValidationGroup="UserInformation" CausesValidation="True"><font color="red">*</font></asp:RequiredFieldValidator>
                            <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ValidationExpression="\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" ForeColor="Red" ControlToValidate="Email" ValidationGroup="UserInformation" ErrorMessage="Invalid Email Format"></asp:RegularExpressionValidator>
                            <asp:CustomValidator ID="CheckEmail" ForeColor="Red" ErrorMessage="This email already is registered." ValidateEmptyString="true"  display="Dynamic" ControlToValidate="Email" runat="server" ValidationGroup="UserInformation" OnServerValidate="checkEmailValidator_ServerValidate"></asp:CustomValidator> 
                        </td>
                    </tr>
                    <tr>
                        <td>
                            <ajaxToolkit:TextBoxWatermarkExtender ID="WatermarkConfirmEmail" runat="server" TargetControlID="ConfirmEmail" WatermarkText="Confirm Email" WatermarkCssClass="watermarked roundedcorner" />
                            <asp:TextBox ID="ConfirmEmail" runat="server" Columns="48" CssClass="roundedcorner"></asp:TextBox>
                            <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="ConfirmEmail" ErrorMessage="Confirm E-mail is required." ToolTip="Confirm E-mail is required." ValidationGroup="UserInformation"><font color="red">*</font></asp:RequiredFieldValidator>
                            <asp:RegularExpressionValidator ID="regexEmailValid" runat="server" ValidationExpression="\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" ForeColor="red" ControlToValidate="ConfirmEmail" ValidationGroup="UserInformation" ErrorMessage="Invalid Email Format"></asp:RegularExpressionValidator>

                        </td>
                    </tr>

次に、サーバー側スクリプトです。これにはすべての行にブレークポイントがあり、どれもヒットすることはありません。したがって、メソッドがトリガーされることはないと想定しています.....

protected void checkEmailValidator_ServerValidate(object sender, ServerValidateEventArgs args)
        {
            args.IsValid = false;

        }

そして、これがフォームの次の部分に移動するためのボタンです。登録プロセスを続行するために、1 つの div を非表示にして別の div を表示するだけです。

 <asp:ImageButton ID="NextButton" runat="server" ImageUrl="images/registration/arrowright.png" 
            ClientIDMode="Static" AutoPostBack="False" OnClientClick="return false;" 
            Height="50px" onmouseover="this.src='images/registration/arrowrightgreen.png'" 
            onmouseout="this.src='images/registration/arrowright.png'" ValidationGroup="UserInformation" UseSubmitBehavior="False"/>

このボタンは、jQuery を使用する登録プロセスの 2 番目の部分に移動するために使用されます。これがOnClientClick="return false;"、jQuery が正しく実行されるように行が存在する理由です。この辺りはありますか?

   $("[id$=NextButton]").click(function (e) {
        //alert(Page_ClientValidate("UserInformation"));
        if (Page_ClientValidate("UserInformation")) {
        $("[id$=pick_user_type]").css('position', 'absolute');
        $("[id$=registration_div]").css('position', 'absolute');
            $("[id$=registration_div]").hide('slide', { direction: 'left' }, 1000);           
            $("[id$=pick_user_type]").show('slide', { direction: 'right' }, 1000);
        }
    });
4

1 に答える 1

0

バリデーターのバリデーターグループを定義するときは、バリデーターが検証しているコントロールのバリデーショングループも定義する必要があります。したがって、このようにテキストボックスを定義します。

<asp:TextBox ID="Email" runat="server" Columns="48" CssClass="roundedcorner"
ValidationGroup="UserInformation"
></asp:TextBox>

ボタンの検証グループを定義しなかった場合は、検証グループも定義します/

編集

OnClientClick="return false;"ボタンのポストバックを作成するには、この行を削除してください。フォームが送信されたことがないということは、サーバー上でリクエストが送信されないことを意味します。

于 2013-09-13T05:39:20.697 に答える