Asp.net 如何管理复杂的数据输入验证

Asp.net 如何管理复杂的数据输入验证,asp.net,validation,Asp.net,Validation,当我开发ASP.NET网络表单应用程序时,我感觉自己正在与当前的潮流抗争。我经常遇到同样的问题,虽然我最终找到了某种解决办法,但我从未对结果感到完全满意 以下是一个典型问题的示例: 设计需要网格或类似网格的结果集。此结果集是从数据库中提取的,但是,每行上都有其他未绑定数据的控件,但它们的内容用于将数据插入其他记录中 一个很好的例子是显示一个产品列表,然后根据数量字段中输入的值和每个产品选择的选项将所选产品添加到购物车中。在混合中,您必须允许多行同时添加到购物车中,并且它开始变得更加复杂 再加上你

当我开发ASP.NET网络表单应用程序时,我感觉自己正在与当前的潮流抗争。我经常遇到同样的问题,虽然我最终找到了某种解决办法,但我从未对结果感到完全满意

以下是一个典型问题的示例:

设计需要网格或类似网格的结果集。此结果集是从数据库中提取的,但是,每行上都有其他未绑定数据的控件,但它们的内容用于将数据插入其他记录中

一个很好的例子是显示一个产品列表,然后根据数量字段中输入的值和每个产品选择的选项将所选产品添加到购物车中。在混合中,您必须允许多行同时添加到购物车中,并且它开始变得更加复杂

再加上你不能同时选择某些产品(互斥),你只能选择一种产品的特定数量,而不能选择另一种,当用户选择他们的商品时,价格可能会发生变化,你可以根据购买的数量(每件商品和总订单)获得每件商品的整体折扣,您使用的是信用额度,不能超过信用额度,也不能购买超过您的账户或您的账户代表在产品中设定的任意金额的特定物品(想想政府限制您购买的某些非处方药),等等。。等等等

一开始只是一个简单的网格和一个add-to-cart,现在变成了一个毫无希望的混乱的业务逻辑,这当然需要验证并向用户通知他们选择中的各种错误

如何处理asp.net中非常复杂的数据输入方案?您是如何开始设计一款软件来完成这一切的?

编辑:


请不要建议更改接口,因为接口不是问题所在。用户对它很满意,并且他们要求它以它的方式运行。我正在寻求有关如何设计和解决实施问题的帮助。

需要考虑的一些选项:

  • 分离验证逻辑,以便可以从客户端和服务器端代码调用它(启用下一点)
  • 使用AJAX执行服务器端验证,并在用户执行各种任务时提供即时反馈,即增加数量
  • 在执行任何操作之前和之后,向用户提供丰富、清晰的说明/反馈。之前:警告产品X不能与产品Y一起购买(特别是如果Y已经在购物车中)。之后:准确解释问题并提出纠正方法,例如“为什么不删除产品Y?”)
  • 优雅地失败,即如果只有一个产品未通过验证,则确保添加所有其他产品
  • 简化输入过程,例如一次只允许向购物车添加一种产品

最后一点很重要。复杂的数据输入过程可能会在用户开始之前让他们感到困惑,并使试图理解大量验证错误变得困难。这甚至在您开始编写验证逻辑之前。

不要将基本验证以外的任何内容放在代码中。隐藏的代码应该只获取用户输入的内容,构建业务对象(或业务对象的集合),并让这些业务对象验证自己

每个业务规则都应该是对业务对象的单个函数调用,只处理一个规则而不处理其他任何规则。然后,你只需一个接一个地给他们打电话,记录哪些通过了,哪些失败了


当验证失败时,业务对象可以为代码提供足够的信息,以显示正确的错误并突出显示有错误的字段。

如果我不清楚,很抱歉。我不是问如何简化流程,而是问如何实现它。我不能改变这些要求,它们是固定不变的。用户不会被界面弄糊涂,因为它是行业所期望的,也是正常的。我以购物车为例,这样你可能会更熟悉这些概念。@Mystere-Man-我认为前两点就足够了。如果服务器上存在验证逻辑,那么可以(通过AJAX)调用JS来执行实际的验证。所以,逻辑在一个地方,有两个呼叫者。@StingyJack-我没有问客户端验证。它不是必需的。我想问的是,在asp.net中如何实现这种复杂性的验证。@Mystere Man-这将取决于需要实现的所有单独规则。除非你公布所有的个人规则,否则任何人都无法合理地回答这个问题。我不是要你实施我的具体规则。我问的是方法、模式、技术等。。可以用于这些情况。请不要说“任何人都无法回答”,而事实上人们可以回答。杰森提出了一些有趣的建议。别那么直截了当。我不确定你是否真的读过我的要求。无法逐行进行验证,因为某些行排除了其他行。如果从头到尾,我会遇到一些问题,我之前处理的行项目在当时是有效的,但在列表的后面是无效的。某些规则可以在特定行(或业务对象)上实现。其他规则只能在整个订单(或业务对象集合)上实现。重要的是每个规则都是自包含的,这有助于代码的可读性。我通常从必须对数据执行的操作的角度来考虑问题,而不是规则和它们处理的数据。但是,本例中的规则是全局规则和数据规则