Использование ASP.NET Compare Validator, чтобы убедиться, что поле уникально - PullRequest
1 голос
/ 31 марта 2009

Я хотел бы использовать Валидатор, чтобы гарантировать, что отправленное содержимое данного текстового поля уникально . Я хочу убедиться, что имя, введенное в поле, не совпадает с любым другим текстовым полем.

Загвоздка в том, что во время компиляции я не знаю, с какими другими текстовыми полями он будет сравниваться. Это может быть где угодно от 0 до n других текстовых полей имени.

Спасибо за любую помощь, которую вы можете оказать.

Ответы [ 3 ]

2 голосов
/ 31 марта 2009

Если вы хотите сделать это на клиенте, простой способ, хотя, возможно, не самый лучший, выглядит примерно так:

<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>
1 голос
/ 31 марта 2009

Я не уверен, как вы хотите, чтобы он выглядел в вашем интерфейсе с точки зрения сообщений об ошибках, но вы можете сделать это с помощью элемента управления CustomValidator на странице.

Когда срабатывает событие ServerValidate, просто найдите все свои текстовые поля на странице, используя FindControl () или что-либо еще проще, возможно, они уже есть в коллекции.

Простой способ проверить уникальные значения - попытаться добавить значения в Dictionary<string, Textbox>, введенные с помощью текстового значения. Метод Add выдает исключение, если ключ уже существует.

0 голосов
/ 31 марта 2009

Я думаю, вы должны использовать Custom Validator вместо Compare Validator. На стороне клиента или на стороне сервера сохраните все значения элемента управления в массиве и проверьте, находится ли элемент в массиве.

Вот хороший образец CustomValidator.

...