使用ASP.NET比较验证程序确保字段唯一

使用ASP.NET比较验证程序确保字段唯一,.net,asp.net,validation,controls,.net,Asp.net,Validation,Controls,我想使用验证器来保证给定文本框提交的内容是唯一的。我想确保输入框中的名称与任何其他文本框中的名称不同 问题是,我不知道在编译时它会与多少其他文本框进行比较。它可以是0-n个其他名称文本框中的任意位置 感谢您提供的帮助。我认为您应该使用比较验证器,而不是比较验证器。在客户端或服务器端,将所有控件的值存储到数组中,并检查该项是否在数组中 这是CustomValidator的一个示例。我不确定您希望它在UI上显示错误消息,但您可以通过页面上的CustomValidator控件来完成这一任务 当触发Se

我想使用验证器来保证给定文本框提交的内容是唯一的。我想确保输入框中的名称与任何其他文本框中的名称不同

问题是,我不知道在编译时它会与多少其他文本框进行比较。它可以是0-n个其他名称文本框中的任意位置

感谢您提供的帮助。

我认为您应该使用比较验证器,而不是比较验证器。在客户端或服务器端,将所有控件的值存储到数组中,并检查该项是否在数组中


这是CustomValidator的一个示例。

我不确定您希望它在UI上显示错误消息,但您可以通过页面上的CustomValidator控件来完成这一任务

当触发
ServerValidate
事件时,只需使用FindControl()或其他最简单的方法在页面上查找所有文本框,也许您已经在一个集合中找到了它们


检查唯一值的一种简单方法是尝试将值添加到由文本值键入的
字典中。如果密钥已经存在,Add方法将抛出异常。

如果您想在客户端上执行此操作,一种简单的方法(尽管可能不是最好的方法)如下所示:

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>
    <script type="text/javascript">
        function CheckUnique(sender, args) {
            var inputArray = document.getElementsByTagName("input");
            for (var i = 0; i < inputArray.length; i++) {
                if (inputArray[i].type == "text" && inputArray[i].id != "TextBox1" && inputArray[i].value == args.Value) {
                    args.IsValid = false;
                    return;
                }
            }
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:CustomValidator ID="CustomValidator1" runat="server" ControlToValidate="TextBox1" ErrorMessage="CustomValidator" ClientValidationFunction="CheckUnique"></asp:CustomValidator>
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
        <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
        <asp:Button ID="Button1" runat="server" Text="Button" />
    </div>
    </form>
</body>
</html>

函数CheckUnique(发送方,参数){
var inputArray=document.getElementsByTagName(“输入”);
for(变量i=0;i
然后忘记ControlTOValidate属性,对每个TextBox控件执行循环。无论如何,在单击“提交”按钮时都应触发验证。当然,args.Value对您来说毫无用处。