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 正在识别客户端函数:

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>

有没有人可以解释一下为什么客户端和服务器端验证都不会被触发。

编辑: 我输入错误的函数,问题还是一样

只是对最后一条注释的另一个更新: 其中 by TextBox 不能为空。我测试过了,这不是真的。CustomValidator 在一个空白页面上启动了我的客户端验证函数,该函数没有值:

<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" />
261151 次浏览

您是否验证了导致回发的控件将 CausesValentication 设置为 tru,并且没有为其分配验证组?

我不知道还有什么可能导致这种行为。

如果客户端验证无效,服务器端验证将不会触发,回发将不会发送。

你就没有其他不合格的证明吗?

不执行客户端验证,因为您指定了 ClientValidationFunction="TextBoxDTownCityClient",这将查找名为 TextBoxDTownCityClient的函数作为验证函数,但函数名应该是 TextBoxDAddress1Client

(如你所写)

客户端验证根本没有在我的 Web 表单上执行,我也不知道为什么。原来问题在于 javascript 函数的名称与服务器控件 ID 相同。

所以你不能这么做。

<script>
function vld(sender, args) { args.IsValid = true; }
</script>
<asp:CustomValidator runat="server" id="vld" ClientValidationFunction="vld" />

但这种方法是有效的:

<script>
function validate_vld(sender, args) { args.IsValid = true; }
</script>
<asp:CustomValidator runat="server" id="vld" ClientValidationFunction="validate_vld" />

我猜它与内部的.NET Javascript 冲突?

还要检查您是否使用了验证组,因为如果设置了 validationgroup 属性并且没有通过 via 显式调用该验证,那么该验证将不会触发

 Page.Validate({Insert validation group name here});

用这个:

<asp:CustomValidator runat="server" id="vld" ValidateEmptyText="true"/>

验证空字段。

您不需要添加2个验证器!

谢谢关于 ControlToValidateLukeH 的信息!

我在代码中试图做的是,当文本字段 B 具有特定值时,只确保某些文本字段 A 在字段中包含某些文本。否则,A 可以是空的或者其他什么。在我的标记中去掉 ControlToValify = “ A”为我解决了这个问题。

干杯!