2

我有TextBox两个验证器。第一个验证器检查 是否TextBox为空。第二个验证器检查 的值是否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 />

所以我的问题是:

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

我想问的另一个问题是,Validator 的 Text 和 ErrorMessage 属性有什么区别?

4

3 回答 3

2

回答问题:How can I sequence the validations so that one validation should be called after other is validated successfully ?

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

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

<asp:CustomValidator ID="CustomValidator1" runat="server" ControlToValidate="TextBox3"
     ClientValidationFunction="disableNextVal" ....

// 示例 JavaScript 代码

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

//也看到您的要求,另一种可能性似乎是 MaskValidator。在这里检查

2nd question:

Text&ErrorMessage属性的区别:

Text: 验证失败时显示的信息。这通常出现在您的控件旁边,例如 TextBox。这与ValidationSummary控件无关。

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

于 2013-08-26T14:25:23.170 回答
2

您应该使用 aRequiredFieldValidator表示空文本,然后使用 aCustomValidator来检查字符串组合。

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

来自MSDN的错误消息:

获取或设置验证失败时在 ValidationSummary 控件中显示的错误消息的文本。

来自 MSDN的文本:

获取或设置验证失败时验证控件中显示的文本。(覆盖 Label.Text。)

编辑:

鉴于您正在进行多次验证,您应该CustomValidator为此使用 Single。在服务器端,您应该同时检查 Empty 和 String 组合,如下所示:

protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
{
  if (string.IsNullOrEmpty(args.Value))
  {
    args.IsValid = false;
    ((CustomValidator)source).Text = "Please enter some value.";
  }
  else if (/*Check if has empty space*/)
  {
    args.IsValid = false;
    ((CustomValidator)source).Text = "Spaces are not allowed.";
  }
  else
  {
    args.IsValid = true;
  }
}
于 2013-08-26T14:14:20.277 回答
1

虽然方法略有不同,但 ValidationSummary 可能对您有所帮助。

于 2013-08-26T14:32:12.527 回答