ASP.NET自定义validation程序客户端和服务器端validation不会触发

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

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

服务器端validation事件:

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

客户端validation事件:

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

我认为至less在服务器端validation会触发,但不。 这从来没有发生过我。 这真的让我难住。

我看着输出,ASP.NET正在识别客户端function:

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

呈现自定义validation器:

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

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

编辑:错误我粘贴在错误的function,问题仍然是一样的

只是对最后一个评论的另一个更新:TextBox不能为空。 我testing了这一点,这是不正确的。 在一个空白页面的CustomValidator激发我的客户端validationfunction罚款没有一个值:

 <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

注意:如果input控件为空,则不会调用validation函数并validation成功。 使用RequiredFieldValidator控件要求用户在input控件中input数据。

编辑:

如果您的CustomValidator指定了ControlToValidate属性(以及您的原始示例),那么只有当控件不为空时才会调用validation函数。

如果你没有指定ControlToValidate那么你的validation函数将会每次被调用。

这为问题开辟了第二个可能的解决scheme。 您可以省略CustomValidatorControlToValidate属性,而不是使用单独的RequiredFieldValidator ,并设置validation函数来执行如下操作:

客户端代码(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... } } 

用这个:

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

validation空字段。

你不需要添加2个validation器!

您是否validation了引起回发的控件是否将CausesValidation设置为tru,并且没有将validation组分配给它?

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

客户端validation没有在我的networking表单上执行,我不知道为什么。 原来问题是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冲突?

同时检查你是否使用validation组,因为如果validation组属性被设置并且没有明确地通过调用,validation将不会被触发

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

如果客户端validation无效,则不会触发服务器端validation,回发不会发送。

你有没有其他的validation不通过?

客户端validation不会执行,因为您指定了ClientValidationFunction="TextBoxDTownCityClient" ,它将查找名为TextBoxDTownCityClient的函数作为validation函数,但函数名称应为TextBoxDAddress1Client

(如你所写)

感谢那些关于ControlToValidate LukeH的信息!

我在代码中试图做的只是确保当文本字段B具有特定值时,某些文本字段A在字段中具有一些文本。 否则,A可以是空白的或其他的。 在我的标记中摆脱了ControlToValidate =“A”,为我解决了这个问题。

干杯!