ASP.NET - 在表示层中显示业务层错误

时间:2011-08-21 00:01:09

标签: asp.net validation

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

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

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

谢谢!

1 个答案:

答案 0 :(得分:2)

实际上有两种方法可以做到这一点:从业务层传回错误代码/对象,或者抛出异常。你也可以把它们结合起来。

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

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