【问题标题】:Customvalidator OnServerValidate event never triggeredCustomvalidator OnServerValidate 事件从未触发
【发布时间】:2013-09-13 05:22:07
【问题描述】:

我正在尝试创建一个自定义验证器,以检查在用户注册时电子邮件是否已经在数据库中。我已经看到许多与 customvalidators 相关的类似问题,但没有任何答案带来任何帮助。

我已将 OnServerValidate 方法简化为始终返回 false 以获得任何类型的响应,但我没有得到任何响应。我相信这种方法永远不会被解雇。我得出了一些结论,还有其他一些问题正在影响事件的触发。

这是位于母版页内容占位符内的 ASP。主文件中还有一个脚本管理器。

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

【问题讨论】:

    标签: asp.net customvalidator


    【解决方案1】:

    当您定义验证器的验证器组时,您还要定义验证器正在验证的控件的验证组。 所以像这样定义你的文本框。

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

    如果你没有定义你的按钮的验证组而不是定义那里的验证组/

    编辑

    OnClientClick="return false;" 删除此行以使您的按钮回发。如果您不删除,则您的表单从未提交意味着它将永远不会在服务器上发送请求。

    【讨论】:

    • 奇怪的是被忽略了。我曾经有过它,也许是出于绝望而将其删除。我已经把它加回来了,我没有改变。没有到达断点。
    • 您是否为导致回发的按钮定义了验证组,我的意思是健全的验证组
    • 我已经编辑了我的帖子以包含验证该组的按钮的代码。它包含 ValidationGroup 语法。
    • OnClientClick="return false;"删除此行以使您的按钮回发,,,
    • 成功了!它进入了断点所在的区域。但是,它会导致我的 jQuery 出现问题。这就是我一开始就有这条线的原因。我已经编辑了我的帖子。我需要这一行来执行 jQuery。无论如何我可以同时回发并正确执行 jQuery 吗?
    猜你喜欢
    • 1970-01-01
    • 2010-12-11
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-26
    • 2011-11-25
    • 2011-04-24
    相关资源
    最近更新 更多