ASP.NET WebForms:短路验证

2024-04-25

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

<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 中的值为非数字时,我同时看到 Numbers、is NonNegative 和 isLessThanMax 的错误消息。

有什么方法可以“短路”验证以获得我的预期行为吗?


只需制作一个在服务器端工作的自定义验证器并使用 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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET WebForms:短路验证 的相关文章

随机推荐

  • Android O 设备中未出现 Google Smart Lock 对话框

    我最近将 GoogleSmartLock 与我的应用程序集成 不知何故 Android O 设备中没有出现保存对话框 并且 API 抛出以下错误 凭证 API 的保存确认对话框已被禁用 避免与 Android 自动填充功能发生冲突 这个选择
  • 删除列值 < 0 的 Pandas DataFrame 行

    我已经阅读了答案this https stackoverflow com questions 18172851 deleting dataframe row in pandas based on column value线程 但它没有回答我
  • 想了解 Windows 剪贴板内部结构

    我有兴趣学习 Windows 系统内部结构及其工作原理 我倾向于学习windows上的系统编程 在这种背景下 我很想知道有关 Windows 剪贴板内部功能的一些事情 当我们选择一些文本 图像等并按下时会发生什么 Ctrl C 当我们在不同
  • /system/lib/libart.so 中的本机崩溃

    我在 Play 商店中有一个应用程序 它有一个IntentService当应用程序启动时 它会做一些工作 并且会导致 Android 5 0 上的本机崩溃 该服务仅扫描资产文件夹以进行应用程序更新 具体来说 这次崩溃似乎发生在升级到 Lol
  • 地形破坏后保留资源

    我想在关闭使用 terraform 创建的一堆资源 包括 CloudWatch 日志组 后保留 CloudWatch 日志 有没有办法告诉terraform destroy节省一些资源 我想我可以在调用 destroy 之前手动从 tfst
  • 如何使用 Azure Active Directory Graph API 获取属于 AppRole 的所有用户

    我一生都无法弄清楚如何查询 Azure Active Directory 的图形 API 来获取属于特定 AppRole 的所有用户 首先我尝试了类似的东西 client Users Where u gt u AppRoleAssignme
  • 如何防范资源耗尽等漏洞?

    我们碰巧使用IBM appscanhttp www 01 ibm com software awdtools appscan http www 01 ibm com software awdtools appscan 针对我们的 java
  • 仅使用 CSS 切换手风琴字形图标

    嗯 我有一个手风琴菜单 我想更改字形图标 我找到了一些询问同样问题的人的答案 但我发现没有答案适用于我的 可能是因为我不知道在哪里应用代码 我在 Jsfiddle 中的菜单 http jsfiddle net 3wt0ehcj http j
  • 连接从左到右 (LTR) 和从右到左 (RTL) 文本

    似乎使用组合从左到右 LTR 和从右到左 RTL 文本paste可能会产生意想不到的结果 x paste c green collapse arabic for blue and red gt 1 green paste x yellow
  • Java If(false) 编译

    我正在使用 Tomcat 开发一个动态 Web 项目 有一个全局标志很有用 这是我在开发服务器和部署服务器之间唯一需要更改的东西 该标志的最大用途是与打印语句一起使用 public class Debug public final stat
  • 安卓定时器问题

    您好 我正在构建一个应用程序 它将在固定的时间段 例如每 30 分钟 执行一段代码 我希望这个时间段是严格的 我的意思是我希望保证该时间段为 30 分钟而不是 28 分钟 或者每当操作系统想要执行它时 我有一个 Timer 对象并按如下方式
  • 如何在本机反应中使用高度自动?

    在浏览器中 可以指定图像的宽度 并且可以将高度设置为自动 这将使图像在绑定到指定宽度的同时保留宽高比 高度和长宽比均事先未知 我怎样才能在本机反应中做同样的事情 Height 属性只能接受数字值 解决方法 得到Dimensions模块来自r
  • 如何展平嵌套 JSON

    尝试将嵌套的 json 响应从 2 层深度压平到 1 层 这是我在 Go Playground 上的工作代码 http play golang org p kHAYuZUTko http play golang org p kHAYuZUT
  • 找出 2 个日期之间的月数

    select age 2012 11 30 00 00 00 timestamp 2012 10 31 00 00 00 timestamp age 2012 12 31 00 00 00 timestamp 2012 10 31 00 0
  • 将MapPageRoute添加到asp.net mvc项目后,站点停止进入Home Controller

    我正在尝试在我的 asp net mvc 项目中路由 aspx Webforms 页面 我在 global asax 中注册该页面 routes IgnoreRoute resource axd pathInfo routes MapPag
  • 如何使用 VS Code 浏览器进行导航

    这是一个关于 VS Code 资源管理器窗口导航的问题 在 Windows 资源管理器应用程序中 我可以立即导航到我选择的任何文件 如果 Windows 资源管理器窗口以升序名称顺序显示我的文件夹或文件 我可以通过键入我要查找的文件 文件夹
  • 获取 angular2 中表单的所有值

    我可以使用以下代码获取表单的值
  • 查找集合列表中不相交集合对的数量

    问题陈述如下 给定一个包含 n 个集合的列表 每个集合包含 k 个整数 找到不相交集合对的数量 假设集合的可能元素为正 且上界为 c gt n 并且假设 k 我试图想出一种有效的算法来比 O kn 2 更快地解决这个问题 这是简单解决方案的
  • 使用java将当前GMT时间转换为CST时区

    我正在尝试使用 JDK8 将当前 GMT 时间转换为 CST 时间 但我的代码总是为两个时区返回相同的时间 我还验证了 getAvailableIDs 具有 CST Calendar cal Calendar getInstance Tim
  • ASP.NET WebForms:短路验证

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