【问题标题】:Showing single error for multiple asp validators显示多个 asp 验证器的单个错误
【发布时间】:2012-12-27 10:21:25
【问题描述】:

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

我添加了一些代码示例:

<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 文件中(供重复使用)。

【问题讨论】:

  • 您能否粘贴一些代码,以便我们更好地理解它?

标签: asp.net validation


【解决方案1】:

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

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

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

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

我会建议你使用 javascript ..

【讨论】:

    【解决方案2】:

    您可以对所有三个验证使用单个自定义验证器,并根据需要将代码置于 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;
            }
        }
    

    您可以使用以下链接了解更多信息:

    MSDN,
    Code Project

    希望这些对你有所帮助。

    【讨论】:

    • 验证器的错误消息来自服务器,所以我不能真正将它们加入一个自定义验证器。您可以查看我刚刚添加的代码示例以了解问题。
    • 您的代码很好。为什么不向所有验证器控件添加验证组。然后在按钮中也指定。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-18
      • 2011-02-21
      • 2019-04-28
      • 1970-01-01
      • 2012-09-05
      • 1970-01-01
      相关资源
      最近更新 更多