posts - 710,  comments - 81,  views - 260万
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

1>事件在try catch中的运用

在多层架构中try catch事件类似于冒泡,如果不对代码做任何处理,无论哪一层发生异常,都会在最顶层的ul层显示出异常信息。所以个人观点,异常的捕获工作最好在ul层。这样所有层级报的异常都可以被捕获到,因为错误会像气泡一样最终会在显示层暴露出来。在每次设计到数据库的时候捕获异常,这样每个页面的数据操作都会被try catch包裹,有没有一种更好得方法,让代码更简洁。答案是肯定的。将控件事件包裹起来,重新申明一个事件,在该事件中调用控件的事件,并且捕获异常。

复制代码
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.Web.UI;
 6 using System.Web.UI.WebControls;
 7 
 8 using System.Reflection;
 9 
10 public partial class _Default : System.Web.UI.Page
11 {
12     protected void Page_Load(object sender, EventArgs e)
13     {
14         btn.Click += new EventHandlerWrap(btn_Click);
15     }
16 
17     protected void btn_Click(object sender, EventArgs e)
18     {
19         lbTime.Text = DateTime.Now.ToString();
20     }
21 }
22 public class EventHandlerWrap
23 {
24     private EventHandler handler;
25     private EventHandler Handler;
26     public EventHandlerWrap(EventHandler handler)
27     {
28         this.handler = handler;
29         Handler = InVoke;
30     }
31 
32     public static implicit operator EventHandler(EventHandlerWrap wrap)
33     {
34         return wrap.Handler;
35     }
36 
37     private void InVoke(object sender, EventArgs e)
38     {
39         try
40         {
41             this.handler(sender, e);
42         }
43         catch (Exception ex)
44         {
45             LogError(ex.Message);
46         }
47     }
48 
49     private void LogError(string errorMsg) { }
50 }
复制代码

 2>事件在用户控件中运用

项目中会设计到报表的流程流转,用到了公司自己研发的工作流,该工作流的功能关联了报表的删除以及状态的显示,所以不同的报表都会添加该工作流,这会导致一个问题的出现,每个页面都必须添加工作流,实现删除功能和状态显示,重复的工作就出现了,所以最总的选择是将工作流的操作和状态封装到自定义空间中。状态的显示可以从工作流实例中通过id获取,但是报表的删除则需要知道具体的表,所以必须把删除操作放在页面,解决的方案是在用户控件中申明一个事件,将删除的操作委托到具体的每个表报的页面中。

复制代码
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.Web.UI;
 6 using System.Web.UI.WebControls;
 7 
 8 public partial class UserControls_WorkFlow : System.Web.UI.Page
 9 {
10     public EventHandler Delete;
11     protected void Page_Load(object sender, EventArgs e)
12     {
13 
14     }
15     protected void lbnDel_Click(object sender, EventArgs e)
16     {
17         if (Delete != null)
18             Delete(sender, e);
19     }
20 }
复制代码
posted on   itprobie-菜鸟程序员  阅读(361)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示