【问题标题】:ASP.NET - displaying business layer errors in the presentation layerASP.NET - 在表示层中显示业务层错误
【发布时间】:2011-08-21 00:01:09
【问题描述】:

目前在我正在开发的 ASP.NET 应用程序中,基本验证(即必填字段)正在表示层中完成,使用 Validators 和 ValidationSummary。这对我特别有用,因为 ValidationSummary 将显示多条错误消息(假设多个验证器设置为无效)。

我还在业务层中进行了一些验证——由于它们的复杂性(以及对数据服务层的依赖),我宁愿不将它们保留在表示层中。但是,我不确定将这些发送回表示层以显示给用户的最佳方式。我最初的考虑是发回带有失败验证消息的List<string>,然后为每个错误动态创建一个 CustomValidator 控件(因为显然您只能将一条错误消息绑定到一个 Validator 控件),以便在有任何错误时显示在 ValidationSummary 中。

我假设我不是第一个遇到这个问题的人,所以我想知道是否有人对此有任何建议。

谢谢!

【问题讨论】:

    标签: asp.net validation


    【解决方案1】:

    基本上有两种方法可以做到这一点:要么从业务层传回错误代码/对象,要么抛出异常。您也可以将两者结合起来。

    举个例子,你可以看看 SqlException 类。当您将 SQL 发送到 SQL Server 时,它会首先运行查询解析器来解析您的 SQL。如果它看到语法错误,那么它将抛出一个 SqlException 并终止查询。您的查询中可能存在多个语法错误。所以 SqlExeption 类有一个包含错误列表的 Errors 属性。然后,您可以在表示层中枚举该列表以格式化您的错误消息,可能使用 CustomValidator。

    您也可以只返回错误列表而不抛出异常。例如,您可以让您的函数在至少发生一个错误的情况下返回一个列表,并在调用成功的情况下返回 null。或者您可以将 List 作为参数传递给您的函数。他们都很好,这完全取决于你觉得哪种方式更方便。抛出异常的好处是它会立即展开多个调用帧,因此您不必检查每个级别的返回值。例如,如果函数 A 调用函数 B ,B 调用函数 C,C 发现有问题,那么如果让 C 返回一个错误对象(或错误代码),那么 B 必须有代码来检查 C 是否返回错误并通过该错误代码/值返回,A 也必须检查它----您需要在每个级别上检查它。另一方面,如果你只是让 C 抛出异常,那么代码会直接进入异常处理程序。您没有检查每个级别的返回值。

    【讨论】:

    • 感谢兰塔的回复。
    猜你喜欢
    • 2013-08-07
    • 2012-09-10
    • 2014-04-23
    • 2010-11-09
    • 1970-01-01
    • 1970-01-01
    • 2012-08-01
    • 2011-04-17
    • 1970-01-01
    相关资源
    最近更新 更多