【问题标题】:ASP.NET WebForms: Short-circuit validationASP.NET WebForms:短路验证
【发布时间】:2013-08-15 16:40:30
【问题描述】:

我有一个正在验证的网格文本框:

<telerik:RadTextBox ID="txtMerchMin" runat="server" Text='<%# Bind("MerchandiseMinimumAmount") %>'></telerik:RadTextBox>
                    <asp:RequiredFieldValidator ID="required" runat="server" ErrorMessage="* required" ControlToValidate="txtMerchMin"></asp:RequiredFieldValidator>
                    <asp:CompareValidator runat="server" ID="isNumbers" Type="Double" Operator="DataTypeCheck" ControlToValidate="txtMerchMin" ErrorMessage="* must be numeric" />
                    <asp:CompareValidator runat="server" ID="IsNonNegative" Type="Double" Operator="GreaterThanEqual" ControlToValidate="txtMerchMin" AmountToCompare="0" ErrorMessage="* should be non-negative"/>
                    <asp:CompareValidator ID="isLessThanMax" ControlToValidate="txtMerchMin" Type="Double" ControlToCompare="txtMerchMax" Operator="LessThan" Text="* should be less than max" runat="server"></asp:CompareValidator>

我希望验证按以下顺序运行并表现如下:

  1. 如果所需的验证失败,则仅显示所需的错误消息。
  2. 如果 isNumbers 验证失败,则仅显示 isNumber 的错误消息。
  3. 如果 isNonNegative 验证失败,仅显示 isNonNegative 的错误消息。
  4. 如果 isLessThanMax 验证失败,显示 isLessThanMax 的错误 仅限留言。

由于现在写的代码,当txtMerchMin中的值为非数字时,我同时看到isNumbers,isNonNegative和isLessThanMax的错误消息。

是否有任何方法可以“短路”验证以达到我的预期行为?

【问题讨论】:

    标签: validation webforms


    【解决方案1】:

    只需创建一个在服务器端工作的 CustomValidator 并使用 if/else 语句来实现您的行为。 例如:

    <telerik:RadTextBox ID="txtMerchMin" runat="server" Text='<%# Bind("MerchandiseMinimumAmount") %>'></telerik:RadTextBox>
        <asp:RequiredFieldValidator ID="required" runat="server" ErrorMessage="* required" ControlToValidate="txtMerchMin"></asp:RequiredFieldValidator>
        <asp:CustomValidator runat="server" ID="customValidator" Display="Dynamic" SetFocusOnError="true" ControlToValidate="txtMerchMin"></asp:CustomValidator>
    

    init 方法集后面的代码中(您也可以在标记中执行此操作)

    customValidator.ServerValidate += new ServerValidateEventHandler(customValidator_ServerValidate);
    

    然后在函数中实现你的逻辑:

    protected void customValidator_ServerValidate(object source, ServerValidateEventArgs args)
    {
        bool isValid = true;
    
        double price;
        bool isDouble = Double.TryParse(args.Value, out price);
        if(!isDouble) {
          // not double (numeric)
          isValid = false;
        }
        else if (...)
        else if (...)
    
        args.IsValid = isValid;
    }
    

    【讨论】:

      猜你喜欢
      • 2018-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多