2009-03-30 5 views
1

Validatorを使用して、指定されたテキストボックスのサブミットされたコンテンツがユニークであることを保証したいと思います。私はボックスに入れられた名前が他のテキストボックスと同じでないことを確認したい。ASP.NET Compare Validatorを使用してフィールドが一意であることを確認する

私はコンパイル時に、それが比較される他のテキストボックスの数を知りません。それは、0 - nの他の名前のテキストボックスからでもどこでもかまいません。

ご協力いただきありがとうございます。

答えて

2

あなたはおそらく最良のものは、このようなものではないが、クライアント上で簡単な方法でそれをしたい場合は:明確にする

<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> 
+0

。各テキストボックスは一意でなければなりません。 – matthewdunnam

+0

次に、ControlTOValidate属性を忘れて、各TextBoxコントロールのループを実行します。とにかく[送信]ボタンをクリックすると、検証が発生するはずです。もちろん、args.Valueは無用になります。 – SirDemon

0

私はあなたがCompare Validatorの代わりにCustom Validatorを使うべきだと思います。クライアント側またはサーバー側では、すべてのコントロールの値を配列に格納し、その項目が配列内にあるかどうかを確認します。

ここにはCustomValidatorのgood sampleがあります。

1

エラーメッセージの表示方法をUIでどのようにしたいのかよく分かりませんが、ページ上のCustomValidatorコントロールでこれを行うことができます。

ServerValidateイベントが発生すると、FindControl()を使用してページ上のすべてのテキストボックスを検索するか、最も簡単なものを探します。

一意の値を確認する簡単な方法は、テキスト値をキーにしてDictionary<string, Textbox>に値を追加することです。キーが既に存在する場合、Addメソッドは例外をスローします。

関連する問題