CustomValidations不会以Web表单显示

时间:2011-06-15 20:52:30

标签: c# asp.net validation

这是我对表单的控制:

<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;
        }
}

3 个答案:

答案 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",并且自定义验证器位于同一验证组中(如果有的话)。