0

私はカスタムバリデーターを持っています:

 <asp:CustomValidator ID="QuestionValidator" runat="server" ErrorMessage="Please select an option" ClientValidationFunction="QuestionValidator_ServerValidate" OnServerValidate="QuestionValidator_ServerValidate" ValidateEmptyText="true"></asp:CustomValidator> 

データリストによって提供される質問のリストがあります。これは、ユーザーが各質問に対する回答を選択できるようにするために必要です。次に、検証機能があります。

Protected Sub QuestionValidator_ServerValidate(ByVal source As Object, ByVal args As ServerValidateEventArgs)
    Dim SelectedItem As Boolean = False
    For Each c As Control In Page.Master.FindControl("form1").Controls
        If TypeOf c Is RadioButton Then
            Dim rb As RadioButton = DirectCast(c, RadioButton)
            If rb.GroupName = "AnswerOptions" AndAlso rb.Checked = True Then
                SelectedItem = True
            End If
        End If
    Next
    args.IsValid = SelectedItem
End Sub

<script type="text/javascript" language="javascript">  
   function QuestionValidator_ServerValidate() {   
        return true;   
    }   
</script>  

ページを実行すると、検証もエラーメッセージも表示されません。私がどこで間違っているのか指摘していただけませんかPage.Master.FindControl("form1").Controls

以前、form1.controlsを介してコントロールをループすることでこのような検証を行いましたが、ページがマスターページを介して渡されたフォームを使用しているため、これは使用できません。

4

4 に答える 4

1

何かを見逃したかもしれませんが、カスタムバリデーターでプロパティControlToValidate = "ID_of_the_control_to_validate"も設定する必要がありますか?

于 2011-01-17T13:26:44.950 に答える
1

CustomValidator と Validaiton プロセスに関与するすべてのコントロールに ValidationGroup を指定する必要があると思います

于 2011-01-17T14:09:35.240 に答える
1

コードに欠陥がある可能性があります。ロジックによると、ページ上の 50 個のラジオ ボタンのうち、1 つだけが選択されていても、検証に合格するためです。また、すべての RB のグループ名は各項目で同じです。ASP.NET がそれらの名前を変更するかどうかは不明です。そうでない場合は、すべての質問に対してすべての RB を 1 つにグループ化する必要があります。

ループ部分については、フォーム上のすべてのコントロールをループする代わりに、DataList.Items コレクションをループできます: Dim item As DataListItem

For Each item In  DataList1.Items
   Dim ctrl As Control
   For Each ctrl In  item.Controls
         'do your rb state check here       
   Next ctrl
Next item
于 2011-01-17T17:44:17.807 に答える
1

「Page.NamingContainer」または「Page.Controls」のいずれかをループして、それがどのようになるかを確認します。

于 2011-01-17T12:56:46.177 に答える