检查重复的条目验证

时间:2013-09-09 23:06:56

标签: c# asp.net sql-server

我在这里使用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 />,提供我描述的功能?或者它必须有点复杂......

3 个答案:

答案 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