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。 您可以省略CustomValidator
的ControlToValidate
属性,而不是使用单独的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”,为我解决了这个问题。
干杯!