C# ASP.NET自定义验证程序的排序以及验证程序和#x27;s文本和错误消息属性

C# ASP.NET自定义验证程序的排序以及验证程序和#x27;s文本和错误消息属性,c#,asp.net,.net,validation,customvalidator,C#,Asp.net,.net,Validation,Customvalidator,我有一个带有两个验证器的文本框。第一个验证器检查文本框是否为空。第二个验证器检查TextBox的值是否包含空格。但是,当我运行项目并尝试在TextBox中不使用任何文本进行验证时,它会显示两个验证程序的错误消息。我想要的是,在第一个验证器成功验证之前,它不应该执行第二个验证器 <asp:CustomValidator ID="CustomValidator1" runat="server" ControlToValidate="TextBox3" ErrorMessage="Please

我有一个带有两个验证器的
文本框
。第一个验证器检查
文本框是否为空。第二个验证器检查
TextBox
的值是否包含空格。但是,当我运行项目并尝试在
TextBox
中不使用任何文本进行验证时,它会显示两个验证程序的错误消息。我想要的是,在第一个验证器成功验证之前,它不应该执行第二个验证器

<asp:CustomValidator ID="CustomValidator1" runat="server" ControlToValidate="TextBox3" ErrorMessage="Please enter some value." Font-Names="Segoe UI" OnServerValidate="CustomValidator1_ServerValidate" SetFocusOnError="True"></asp:CustomValidator>
<br />
<asp:CustomValidator ID="CustomValidator2" runat="server" ControlToValidate="TextBox3" ErrorMessage="Spaces are not allowed." Font-Names="Segoe UI" OnServerValidate="CustomValidator2_ServerValidate" SetFocusOnError="True"></asp:CustomValidator>
<br />



因此,我的问题是:

如何对验证进行排序,以便在成功验证另一个验证后调用一个验证


我想问的另一个问题是,验证器的文本属性和ErrorMessage属性之间有什么区别?

您应该使用
RequiredFieldValidator
检查空文本,然后使用
CustomValidator
检查字符串组成

<asp:RequiredFieldValidator 
 ID="RequiredFieldValidator1"
 ControlToValidate="TextBox3"  
 runat="server"     
 ErrorMessage="Please enter some value.">
</asp:RequiredFieldValidator>
<br />
<asp:CustomValidator 
 ID="CustomValidator2" 
 runat="server" 
 ControlToValidate="TextBox3" 
 ErrorMessage="Spaces are not allowed." 
 Font-Names="Segoe UI" 
 OnServerValidate="CustomValidator2_ServerValidate" SetFocusOnError="True">
</asp:CustomValidator>
<br />

问题的答案:
如何对验证进行排序,以便在成功验证另一个验证后调用一个验证?

您在.aspx页面中添加的验证程序,将按照创建顺序添加到
页面.validators
集合中。验证按照它们在Page.Validators集合中出现的顺序运行。因此,aspx文件中的第一个验证程序在Page.Validators中是第一个。如果您想重新排列顺序,那么正确的方法是按照您希望验证程序启动的顺序排列页面中的验证程序

注意:验证程序将逐个启动。如果您不希望下一个验证器启动,您可以使用Javascript禁用下一个验证器。在第一个验证器中调用ClientValidation函数

<asp:CustomValidator ID="CustomValidator1" runat="server" ControlToValidate="TextBox3"
     ClientValidationFunction="disableNextVal" ....
//同样看到您的需求,还有一种可能是MaskValidator

文本
错误消息
属性之间的差异:

Text
:验证失败时显示的消息。这通常出现在控件旁边,比如文本框。这与
验证摘要
控件无关


ErrorMessage
:验证失败时,
ValidationSummary
控件中显示的文本。如果您没有设置上面的
Text
属性,则验证控件中将显示此
ErrorMessage
值。

虽然有一点不同,但ValidationSummary可能会对您有所帮助。

我已经尝试使用
RequiredFieldValidator
,但效果相同。关于ErrorMessage和Text之间的区别,我认为设置其中任何一个的值都会显示错误消息。那么实际的区别是什么呢?或者有什么不同吗?我只是写了MSDN的不同之处。而且,如果您尝试了,服务器方法中还存在其他错误,每次都返回isValid=false,您应该查看一下。我的验证器工作正常。问题是它们同时工作。我的意思是,如果第一次验证失败,则不应执行其他验证程序。编辑我的answear,签出!实际上,如果第一个验证失败,我想取消另一个验证。问题是它们同时执行。编辑了我的答案。请参见:注释一节
<asp:CustomValidator ID="CustomValidator1" runat="server" ControlToValidate="TextBox3"
     ClientValidationFunction="disableNextVal" ....
function disableNextVal()
{
 // firstly check here for first condition, if First condition fails,
 // disable the next validator as below.
  var nextCustomVal = document.getElementById('nextCustomValidatorClientID');
  ValidatorEnable(myVal, false); 
// or use this one:
  myVal.enabled = false;
}
2nd question: