gpt4 book ai didi

c# - 使用一个 CustomValidator 验证多个错误

转载 作者:行者123 更新时间:2023-11-30 22:47:13 24 4
gpt4 key购买 nike

我正在尝试弄清楚如何在业务对象上使用验证。

到目前为止,我只在 CustomValidator 上看到过只检查 1 个错误的示例。我有两个带有 DateTime 输入的字段,应该检查 3 个或更多错误。我想通常我应该检查客户端,然后检查服务器,最后检查数据库级别。

  • 如果我在 field 上出错,我应该不能离开 field 。
  • 在客户端验证中,这不是应该导致异常的错误,因为它只是用户错误。但是,如果出现问题并且用户绕过客户端验证,则服务器验证应该会引发异常。
  • 最后,如果我有其他的,例如批量更新工作然后他们应该使用数据库验证代码。如果我错过了一些基本的东西,请纠正我!
  1. `dateFrom` 不为空。 (但 `dateTo` 可以为空)
  2. `dateFrom`早于`dateTo`
  3. `dateFrom` 和 `dateTo` 在常量 `MinDate` 和 `MaxDate` 内

那么我的验证应该是什么样子,客户端、服务器和数据库?

想法:

验证逻辑是否应该在 3 个不同的地方分开;用户界面、代码和数据对象(数据库)?什么时候是完全相同的代码?似乎多余?

我可以对所有三项检查使用相同的验证方法吗?或者我是否需要实现 3 个代码块和每个代码块的 3 个方法,然后如何在 ValidationSummary 中很好地列出所有代码块?

最佳答案

为了减少代码重复和由此产生的错误,所有验证代码都应该在一个层中 - 最好是业务层,因为它处于评估对象并确定其是否有效的最佳位置。

然而,虽然这是一个理论上的理想,但在现实世界中往往不切实际。在客户端-服务器环境中,如 ASP.NET,您希望在客户端复制尽可能多的验证,以减少到服务器的往返行程。此外,如果您有其他业务程序(例如批量上传)在不通过您的业务对象的情况下触及您的表,您也需要在数据库中实现验证,以防止创建垃圾数据。

对于您示例中的验证,我会在我的业务对象和三个 CustomValidators 上创建三个验证方法 - 每个验证器都会在服务器端的业务对象上调用相应的方法。我还会编写一些 JavaScript 代码在客户端运行,这样服务器端代码就只存在于捕获不支持 JavaScript 的浏览器或恶意制作的 HTTP 请求。

对于难以在 JavaScript 中执行的验证(即需要业务对象),我不会费心使用 CustomValidator。相反,这些验证会等到用户按下提交按钮,此时我可以使用业务对象来验证自身并返回任何错误。

关于c# - 使用一个 CustomValidator 验证多个错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2311196/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com