validation - ASP.NET Web 窗体 : Short-circuit validation

标签 validation webforms

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

<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 验证失败,则仅显示 isNumbers 的错误消息。
  3. 如果 isNonNegative 验证失败,则仅显示 isNonNegative 的错误消息。
  4. 如果 isLessThanMax 验证失败,显示 isLessThanMax 的错误 仅消息。

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

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

最佳答案

只需制作一个在服务器端工作的 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;
}

关于validation - ASP.NET Web 窗体 : Short-circuit validation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18257374/

相关文章:

c# - ASP.NET WebForms 使用 IoC 动态加载 WebUserControls

c# - 为什么我收到错误 Could not load type 'SlipUpdate' ?

php - 验证输入是否是链接

php - 调用字符串上的成员函数 all()(查看 :

php - CakePHP:将日期验证为 'dmy',但将其保存到MySQL作为正确的日期

php - 如何在 Blade 文件中的输入字段下方显示错误消息 - Laravel

asp.net - 这是做什么的 : MS_POSITIONING ="GridLayout"

Global.asax中的ASP.NET路由

asp.net - 如何确定为什么我的 azure 上的 asp.net webform 应用程序需要很长时间才能启动?

javascript - jQuery 正则表达式验证