我在这里使用MySQL,PHP和jQuery问了一个类似的问题,但我现在在C#.NET中实现了一个站点并使用了内置的ASP.NET验证。
在我的用户注册中,我想验证(使用ajax,而不是在表单提交后)用户的电子邮件是唯一的,即我想执行一个SQL查询,看看是否有一个结果行,用户具有什么键入电子邮件字段。根据我的阅读,没有一种很好的方法来组合jQuery验证和asp.net验证,所以我需要一种方法来通过ASP.NET实现这一点。
我没有使用内置的Membership框架。
以下是我处理电子邮件
的表单部分<%--email and confirm email--%>
<tr>
<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"><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>
</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>
有什么方法可以在电子邮件字段中实现<asp:CustomValidator />
,提供我描述的功能?或者它必须有点复杂......
答案 0 :(得分:1)
只需使用相关电子邮件进行http POST以及用户拥有的其他注册信息。在后端你可以做;
SELECT
COUNT(1)
FROM MyDb.dbo.Members
where email = 'email that was passed by front end'
该查询的结果应始终为1或0.如果为1则返回错误消息并将其显示给用户,如果为0,则插入数据并返回成功。如果它大于1,那么你的代码之外的其他东西都插入了dupes,或者你编写的代码是错误的:)
答案 1 :(得分:1)
使数据库表中的EMail字段唯一。当您尝试插入时,它通常会抛出唯一约束错误。检查代码中的错误并显示验证。
答案 2 :(得分:0)
可以使用jquery和Web方法完成此验证。使用jquery连接文本框的onblur事件,以在代码隐藏文件中对Web方法进行AJAX调用。 Web方法是一种静态方法,应该调用数据层方法来检查数据库中是否已存在电子邮件ID。根据返回的值,您可以向用户显示相应的消息。
您可以阅读有关ASP.NET Web方法的更多信息here