0

我在 asp 中有一个带有 3 个不同验证器的文本框控件。每个验证器都从服务器获取错误消息,并且每个验证器都验证不同的东西。我的问题是,对于某些值,两个或多个验证器正在触发并且我收到不止一个错误消息。我想做某种优先级功能,这意味着如果第一个验证器正在触发其他两个验证器,则不会。有什么方法可以让验证器表现得像那样吗?

我添加了一些代码示例:

<asp:RequiredFieldValidator ID="cvRequired" runat="server" Display="Dynamic"
    ControlToValidate="txtBox" />
<asp:RegularExpressionValidator ID="cvFormat" runat="server" Display="Dynamic"
    ControlToValidate="txtBox" ValidationExpression="^([A-Za-z])+$" />
<asp:CustomValidator ID="cvCustom" runat="server" Display="Dynamic"
    ControlToValidate="txtBox" ClientValidationFunction="validateFunction" />

如果所需的验证器无效,我希望格式验证器和自定义验证器不会触发(实际上,我只是希望它们不显示错误消息)。

正如我所说,错误消息来自服务器,所以我不能真正将它们加入一个自定义验证器。此外,“validateFunction”在另一个 js 文件中(用于重用)。

4

3 回答 3

0

您需要考虑的逻辑选项很少,

(txtPhone) having three validators.
1.RangeValidator, 2.CustomValidator 3.Regexvalidator

说,在验证之后(如果验证失败/通过,检查它返回的内容)并采取行动。

 if(rangevalidator1 != null)
{
 ...somecode...
} 

我会建议你使用 javascript ..

于 2012-12-27T10:32:51.327 回答
0

您可以对所有三个验证使用单个自定义验证器,并根据需要将代码置于 if 条件中。

<asp:CustomValidator runat="server" ID="cstmStartDateValidater"                     
                        ToolTip="Start date cannot be greater than equal to end date/time or less than current date/time" 
                        ErrorMessage="*" ControlToValidate="txtStartDateTime"
                     ForeColor="Red" ValidationGroup="vlgMessage" SetFocusOnError="true" 
                        onservervalidate="cstmStartDateValidater_ServerValidate" ></asp:CustomValidator>

在 .cs 页面中

protected void cstmStartDateValidater_ServerValidate(object source, ServerValidateEventArgs args)
    {
        if (CompareStartDate())
        {
            args.IsValid = true;
        }
        else
        {
            args.IsValid = false;
        }
    }

您可以使用以下链接获取更多信息:

代码项目_

希望这些对您有所帮助。

于 2012-12-27T10:33:39.703 回答
0

利用 ajax 控件工具包中提供的 ValidatorCalloutExtender 控件。在每个控件上放置一个单独的 ValidatorCalloutExtender,您希望对其进行验证。

于 2012-12-27T10:37:09.230 回答