Customvalidator OnServerValidate събитие никога не е задействано

Опитвам се да създам персонализиран валидатор, за да проверя дали имейл вече е в базата данни в момента на регистрация на потребител. Виждал съм много подобни въпроси, свързани с персонализирани валидатори, но нито един отговор не е донесъл полза.

Опростих метода OnServerValidate, така че винаги да връща false, за да получа ВСЯКАКЪВ отговор, но не получавам никакъв отговор. Вярвам, че методът никога не се използва. Стигнах до известно заключение, че има някакъв друг проблем, който оказва влияние върху задействането на събитието.

Ето 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;

        }

А ето го и бутона за преминаване към следващата част на формата. Той просто скрива един 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. Ето защо редът 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);
        }
    });

person Ian McCullough    schedule 13.09.2013    source източник


Отговори (1)


Когато дефинирате валидаторската група на валидатор, вие също трябва да дефинирате валидиращата група от контроли, които валидаторът валидира. Така че дефинирайте вашето текстово поле по този начин.

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

Ако не сте дефинирали групата за валидиране на вашия бутон, дефинирайте и там групата за валидиране/

Редактиране

OnClientClick="return false;" премахнете този ред, за да направите своя бутон обратно изпращане. Ако не премахнете, формулярът ви никога не е изпратен, означава, че никога няма да изпрати заявка на сървъра.

person Amit Singh    schedule 13.09.2013
comment
Странно, че това беше пропуснато. Имах го там в един момент, може би го изтрих от отчаяние. Добавих го обратно и нямам промяна. Точките на прекъсване не се достигат. - person Ian McCullough; 13.09.2013
comment
дефинирахте ли групата за валидиране за вашия бутон, който причинява обратно изпращане, имам предвид нормална група за валидиране - person Amit Singh; 13.09.2013
comment
Редактирах публикацията си, за да включа кода за бутона, който валидира тази група. Той съдържа синтаксиса ValidationGroup. - person Ian McCullough; 13.09.2013
comment
OnClientClick=връща невярно; премахнете този ред, за да направите своя бутон обратно изпращане,,, - person Amit Singh; 13.09.2013
comment
Това проработи! Влезе в региона, където са точките на прекъсване. Това обаче създава проблеми с моя jQuery. Ето защо имах тази линия в началото. Редактирах публикацията си. Имам нужда от този ред, за да изпълня jQuery. Мога ли все пак да имам както обратната публикация, така и да изпълня правилно jQuery? - person Ian McCullough; 13.09.2013
comment
@IanMcCullough сървърното валидиране на персонализиран валидатор валидира само когато формулярът е изпратен, няма друг начин, който можете да направите, е да използвате клиентски скрипт на персонализиран валидатор вместо servervalidatore. и валидирайте от страна на клиента. - person Amit Singh; 13.09.2013