这是我对表单的控制:
<asp:CustomValidator ID="txtZipCode" runat="server"
ErrorMessage="Enter your zip code." ControlToValidate="txtZip" EnableClientServer="false" ValidateEmptyText="true"
ForeColor="Red" ></asp:CustomValidator>
这是我的方法:
protected void btnContinue_Click(object sender, EventArgs e)
{
if (ddlState.SelectedValue == "International (No U.S. State)" && ddlCountry.SelectedValue == "United States")
{
CustomValidator1.IsValid = true;
}
}
答案 0 :(得分:1)
您没有正确使用验证器。
当表单回发到服务器时,页面的Validate()函数会轮询所有验证器以确定它们是否有效。要使CustomValidator响应轮询,您必须拦截ServerValidate事件。这是您的逻辑应该用于确定特定验证器是否有效的地方。然后,在按钮的Click事件上,检查以确保表单在继续之前有效。
以下是使用您的代码编写的示例:
protected void CustomValidator1_ServerValidate( object source,
ServerValidateEventArgs args )
{
if ( ddlState.SelectedValue == "International (No U.S. State)"
&& ddlCountry.SelectedValue == "United States" )
{
args.IsValid = true;
}
else
{
args.IsValid = false;
}
}
protected void btnContinue_Click( object sender, EventArgs e )
{
if ( !Page.IsValid )
return;
// do whatever the continue button is supposed to do
}
答案 1 :(得分:0)
也许你错过了其他声明。如果该国是国际而该国是美国,应该会发生什么?我无法确定应该是什么行为。
if (ddlState.SelectedValue == "International (No U.S. State)" && ddlCountry.SelectedValue == "United States")
{
CustomValidator1.IsValid = true;
}
else
{
CustomValidator1.IsValid = false;
}
您必须将它们显式设置为false,验证器不会默认为false。
答案 2 :(得分:0)
ControlToValidate属性在CustomValidator中没有意义,您应该在OnServerValidate属性中指定服务器验证函数:
<asp:CustomValidator runat="server"
ErrorMessage="Enter your zip code."
EnableClientScript="false"
OnServerValidate="OnZipCodeValidate">
</asp:CustomValidator>
<script language="c#" runat="server">
protected void OnZipCodeValidate(object sender, ServerValidateEventArgs args) {
// not intending to write correct validation function, just an example
args.IsValid =
ddlState.SelectedValue == "International (No U.S. State)" ||
(ddlCountry.SelectedValue == "United States" &&
!String.IsNullOrEmpty(txtZip.Text));
}
</script>
此外,请确保您的表单的提交按钮具有CausesValidation="true"
,并且自定义验证器位于同一验证组中(如果有的话)。