我在ASPX页面中有一个ObjectDataSource,它从业务逻辑类调用CRUD操作.当在这些操作期间发生异常时,我想告知用户错误并记录它们.但我想要在业务逻辑和表示层之间进行明确的分离.我知道Selected,Inserted,Updated,Deleted事件提供了ObjectDataSourceStatusEventArgs类型的参数,其中包含发生异常的属性“Exception”.
这些事件的处理程序是处理ObjectDataSource异常的最佳位置还是有更好的方法?事件参数链的Exception属性是否在操作期间发生了所有异常?
欢迎任何意见或建议,
谢谢,
卡伦
最佳答案 在Biz层对象执行的CRUD操作期间引发异常时,它应由Biz对象处理,但部分处理.这是因为您希望反馈到达表示层(并且您还想记录错误).因此,您可以:
一个.按原样重新抛出异常.这会将其冒充到您的表示层.
湾将名称 – 值数据对添加到异常的Data属性,然后重新抛出它.
C.将引发的异常包装到自定义异常类型中并抛出它.
然后,此异常将冒泡到您的ObjectDataSource,并通过Selected / Inserted / Deleted / Updated事件处理程序中的ObjectDataSourceStatusEventArgs.Exception属性提供.然后,您应该检查此属性是否为空.如果没有,ObjectDataSource会在TargetInvocationException包装器中包装任何异常(是的,复数!),因此您可能需要获取InnerException.
然后,您可以修改UI元素,以便向用户提供操作未成功完成的必要反馈.此外,您需要将ExceptionHandled属性设置为True,以防止异常冒泡到页面级别.
至于记录异常,个人而言,我会在两个层中记录错误 – Biz逻辑层和表示层.