Asp.net 自定义验证程序未启动(没有错误消息,但没有验证)
我有一个自定义验证器:Asp.net 自定义验证程序未启动(没有错误消息,但没有验证),asp.net,vb.net,validation,master-pages,findcontrol,Asp.net,Vb.net,Validation,Master Pages,Findcontrol,我有一个自定义验证器: <asp:CustomValidator ID="QuestionValidator" runat="server" ErrorMessage="Please select an option" ClientValidationFunction="QuestionValidator_ServerValidate" OnServerValidate="QuestionValidator_ServerValidate" ValidateEmptyText="true"
<asp:CustomValidator ID="QuestionValidator" runat="server" ErrorMessage="Please select an option" ClientValidationFunction="QuestionValidator_ServerValidate" OnServerValidate="QuestionValidator_ServerValidate" ValidateEmptyText="true"></asp:CustomValidator>
我有一个由datalist提供的问题列表,我需要确保用户选择每个问题的答案。然后,我有我的验证功能:
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>
protectedsubquestionvalidator\u ServerValidate(ByVal源作为对象,ByVal args作为ServerValidateEventArgs)
将SelectedItem设置为布尔值=False
对于Page.Master.FindControl(“form1”).Controls中的每个c As控件
如果c的类型是单选按钮,那么
作为RadioButton的Dim rb=DirectCast(c,RadioButton)
如果rb.GroupName=“AnswerOptions”且rb.Checked=True,则
SelectedItem=True
如果结束
如果结束
下一个
args.IsValid=SelectedItem
端接头
函数QuestionValidator_ServerValidate(){
返回true;
}
当我运行页面时,没有验证,也没有错误消息。请你指出我哪里出了问题,我怀疑它在Page.Master.FindControl(“form1”).Controls
上
我以前通过form1.controls在控件之间循环进行过此类验证,但这是不可用的,因为页面使用了通过母版页传递的表单。我将尝试通过“page.NamingContainer”或“page.controls”进行循环,并查看如何进行。我将尝试通过“page.NamingContainer”或“page.controls”进行循环“Page.Controls”并查看它是如何运行的。也许我遗漏了一些内容,但是您不应该在自定义验证器中也设置属性ControlToValidate=“ID\u of the_control\u to_validate”?也许我遗漏了一些内容,但是您不应该也将属性ControlToValidate=“ID\u of the_of the_control\u设置为\u validate吗“在自定义验证器中?我认为您需要为CustomValidator和Validaiton流程中涉及的所有控件提供ValidationGroup我认为您需要为CustomValidator和Validaiton流程中涉及的所有控件提供ValidationGroup您的代码中可能存在缺陷。因为按照逻辑,如果页面上的50个单选按钮中只有一个被选中,那么验证将通过。此外,所有RBs的组名对于每个项目都是相同的。不确定ASP.NET是否重命名了这些问题,如果不是,则所有RBs都将被分组为一个问题 对于循环部分,您可以在DataList.Items集合中循环,而不是在窗体上的所有控件中循环: 将项目设置为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
您的代码中可能有缺陷。因为按照逻辑,如果页面上的50个单选按钮中只有一个被选中,那么验证将通过。此外,所有RBs的组名对于每个项目都是相同的。不确定ASP.NET是否重命名了这些问题,如果不是,则所有RBs都将被分组为一个问题 对于循环部分,您可以在DataList.Items集合中循环,而不是在窗体上的所有控件中循环: 将项目设置为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
这应该是客户端验证吗?我在一些浏览器上验证时遇到了问题。如果可能的话,两个浏览器目前都不工作。这应该是客户端验证吗?我在一些浏览器上验证时遇到了问题。如果可能的话,两个浏览器都不工作。我也尝试了Page.Controls(它给了我相同的结果)。如果我改为page.namingcontainer.controls,我会得到一张借条。ThanksI也尝试了Page.Controls(它给了我同样的结果)。如果我改为page.namingcontainer.controls,我会得到一张借条。谢谢