c# – ASP.NET自定义验证器客户端和服务器端验证不触发

这没有发生在我以前,但由于某种原因客户端和服务器端验证事件没有被触发:

<asp:TextBox ID="TextBoxDTownCity" runat="server" CssClass="contactfield" />
<asp:CustomValidator ID="CustomValidator2" runat="server" EnableClientScript="true"
    ErrorMessage="Delivery Town or City required"
    ClientValidationFunction="TextBoxDTownCityClient" 
    ControlToValidate="TextBoxDTownCity"
    OnServerValidate="TextBoxDTownCity_Validate" Display="Dynamic" >
</asp:CustomValidator>

服务器端验证事件:

protected void TextBoxDTownCity_Validate(object source, ServerValidateEventArgs args)
{
    args.IsValid = false;
}

客户端验证事件:

function TextBoxDCountyClient(sender, args) {
    args.IsValid = false;
    alert("test");
}

我认为至少服务器端验证会火,但没有。这从来没有发生在我以前。这真的让我郁。。

我看看输出和ASP.NET是识别客户端功能:

ASP.NET JavaScript输出:

var ctl00_ctl00_content_content_CustomValidator2 = document.all ? document.all["ctl00_ctl00_content_content_CustomValidator2"] : document.getElementById("ctl00_ctl00_content_content_CustomValidator2");

ctl00_ctl00_content_content_CustomValidator2.controltovalidate = "ctl00_ctl00_content_content_TextBoxDTownCity";

ctl00_ctl00_content_content_CustomValidator2.errormessage = "Delivery Town or City required";

ctl00_ctl00_content_content_CustomValidator2.display = "Dynamic";

ctl00_ctl00_content_content_CustomValidator2.evaluationfunction = "CustomValidatorEvaluateIsValid";

ctl00_ctl00_content_content_CustomValidator2.clientvalidationfunction = "TextBoxDTownCityClient";

呈现的自定义验证器:

<span id="ctl00_ctl00_content_content_CustomValidator2" style="color:Red;display:none;">Delivery Town or City required</span> 

任何一个人都可以了解为什么客户端和服务器端验证都不会被触发。

编辑:Typo我粘贴在错误的功能,问题仍然相同

只是另一个更新到最后一个注释:其中的TextBox不能为空。我测试了这一点,这是不是真的。在空白页面上,CustomValidator触发了我的客户端验证函数fine,没有值:

<asp:TextBox ID="TextBox1" runat="server" />
<asp:CustomValidator ID="CustomValidator1" runat="server" 
ErrorMessage="CustomValidator" ClientValidationFunction="TextBoxDAddress1Client"></asp:CustomValidator>
<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
最佳答案
您的CustomValidator只有在TextBox不为空时才会触发。

如果你需要确保它不是空的,那么你还需要一个RequiredFieldValidator

07001

编辑:

如果你的CustomValidator指定了ControlToValidate属性(和你的原始示例),那么你的验证函数只会在控件不为空时被调用。

如果不指定ControlToValidate,那么每次都将调用验证函数。

这打开了第二个可能的解决方案的问题。而不是使用单独的RequiredFieldValidator,您可以从CustomValidator中省略ControlToValidate属性,并设置验证函数来执行以下操作:

客户端代码(Javascript):

function TextBoxDCountyClient(sender, args) {
    var v = document.getElementById('<%=TextBoxDTownCity.ClientID%>').value;
    if (v == '') {
        args.IsValid = false;  // field is empty
    }
    else {
        // do your other validation tests here...
    }
}

服务器端代码(C#):

protected void TextBoxDTownCity_Validate(
    object source, ServerValidateEventArgs args)
{
    string v = TextBoxDTownCity.Text;
    if (v == string.Empty)
    {
        args.IsValid = false;  // field is empty
    }
    else
    {
        // do your other validation tests here...
    }
}

转载注明原文:c# – ASP.NET自定义验证器客户端和服务器端验证不触发 - 代码日志