关于验证:ASP.NET – 在表示层中显示业务层错误

ASP.NET - displaying business layer errors in the presentation layer

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

我还在业务层中进行了一些验证——由于它们的复杂性(以及数据服务层的依赖性),我不希望将它们保留在表示层中。但是,我不确定将这些内容发送回表示层以便向用户显示的最佳方法。我最初考虑的是发送带有失败的验证消息的List,然后动态地为每个错误创建一个customvalidator控件(显然,您只能将一个错误消息绑定到一个validator控件),以便在存在任何错误时在validationsummary中显示。

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

谢谢!


有两种方法可以做到这一点:要么从业务层返回一个错误代码/对象,要么抛出一个异常。你也可以两者结合。

例如,可以查看sqlException类。当您向SQL Server发送SQL时,它首先运行一个查询分析器来分析您的SQL。如果它看到语法错误,那么它将抛出一个sqlException并终止查询。查询中可能有多个语法错误。因此,sqlexeption类有一个包含错误列表的错误属性。然后,您可以通过表示层中的列表枚举来格式化错误消息,可能需要使用CustomValidator。

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