我有一个带有两个验证器的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属性有什么区别?
答案 0 :(得分:2)
您应该使用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 />
来自MSDN的ErrorMessage:
获取或设置a中显示的错误消息的文本 验证失败时的ValidationSummary控件。
来自MSDN的Text:
获取或设置验证控件中显示的文本 验证失败。 (重写Label.Text。)
编辑:
鉴于您正在进行多项验证,您应该使用单CustomValidator
。在服务器端,你应该同时检查Empty和Then组合,如下所示:
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;
}
}
答案 1 :(得分: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。 Check here
2nd question:
Text
&amp;之间的差异ErrorMessage
财产:
Text
:验证失败时显示的消息。这通常出现在您的控件旁边,如TextBox。这与ValidationSummary
控件无关。
ErrorMessage
:验证失败时ValidationSummary
控件中显示的文本。如果您未在上面设置Text
属性,则此ErrorMessage
值将显示在验证控件中。
答案 2 :(得分:1)
虽然稍有不同,但ValidationSummary可能对您有所帮助。