我正在尝试创建一个customvalidator来检查用户注册时电子邮件是否已存在于数据库中。我已经看到很多类似的问题涉及customvalidators但没有答案带来任何好处。
我已将OnServerValidate方法简化为始终返回false以获得任何类型的响应,但我没有得到任何响应。我相信这种方法永远不会被解雇。我得出了一些结论,还有一些其他问题影响了事件的触发。
这是ASP,它位于母版页中的contentplaceholder内。主文件中还有一个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并显示另一个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);
}
});
答案 0 :(得分:0)
定义验证器的验证器组时,还要定义验证器正在验证的控件验证组。 所以定义你的文本框就像这样。
<asp:TextBox ID="Email" runat="server" Columns="48" CssClass="roundedcorner"
ValidationGroup="UserInformation"
></asp:TextBox>
如果您没有定义按钮的验证组,也没有定义验证组/
修改强>
OnClientClick="return false;"
删除此行以使您的按钮回发。如果你没有删除你的表单永远不会提交意味着它永远不会在服务器上发送请求。