2012-02-28 17 views
0

asp.netおよびvb.netに関する質問があります。いくつかのデータをバインドし、ユーザーが特定のテキストボックス内のフィールドを更新/変更できるようにするリピータコントロールがあります。ユーザーが有効な日付またはテキスト「TBD」を入力しなかった場合にトリガーする検証コントロールを追加しました。送信時に、対応するバリデータが有効でない各フィールドを強調表示したい。これは私の現在のコードですが、テキストボックスコントロールの検索方法は失われています。リピータ制御のフィールド検証

Sub ValidateDateField(ByVal sender As Object, _ 
         ByVal args As ServerValidateEventArgs) 
    'validate against three conditions - date, "TBD", and "N/A" 
    Dim dtValue = args.Value 
    If dtValue.ToUpper = "TBD" Or dtValue.ToUpper = "N/A" Then 
     args.IsValid = True 
    ElseIf IsDate(dtValue) Then 
     args.IsValid = True 
    Else 
     args.IsValid = False 

     Dim cont As WebControl = DirectCast(Page.FindControl(args.ToString), WebControl) 

     cont.BackColor = Drawing.Color.White 

     util.Client_Alert("Please Update Highlighted Fields") 

    End If 
End Sub 

私は完全に私RepeaterコントロールのCONT = textbox1row1を取得する方法へと失われています。お知らせ下さい。今まで私が見たすべての例では、text1.BackColor =

+0

、それを行うには、不器用な方法かもしれないが、私は検証のために投稿することはできません。私は8時間待たなければならない。私は許可されたときに再投稿します。 – user1165864

答えて

0

のようにコントロールを直接記述しています。その答えを理解しました。申し訳ありません、質問のために。なぜ私はそれについてもっと早く考えなかったのか分からない。私は自分のカスタムvalの命名コンテナを見つけ、そのリピータの名前に基づいてコントロールを見つけました。 vb.netではこのようなものだった。だから私は仕事にこれを得た

Sub ValidateDateField(ByVal sender As Object, _ 
         ByVal args As ServerValidateEventArgs) 

    'args holds value. validate against three conditions - date, "TBD", and "N/A" 
    Dim dtValue = args.Value 

    Dim cont As CustomValidator = sender 
    Dim myNC As Control = cont.NamingContainer  
    Dim strControl As String 

    strControl = cont.ControlToValidate 

    Dim txtbox As TextBox = _ 
     DirectCast(myNC.FindControl(cont.ControlToValidate), TextBox) 

    If dtValue.ToUpper = "TBD" Or dtValue.ToUpper = "N/A" Or IsDate(dtValue) Then 
     args.IsValid = True 
     txtbox.BackColor = Drawing.Color.Empty 
    Else 
     args.IsValid = False 

     txtbox.BackColor = Drawing.Color.White 

    End If 

End Sub 
関連する問題