快速业务通道

探讨对Web控件的异常处理

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-19
eturn; 92    } 93     94    try 95    { 96      RenderByCatchedException(writer); 97    } 98    catch (HttpUnhandledException) 99    { 100      throw; 101    } 102    catch (Exception ex) 103    { 104      RenderException(writer, ex); 105    } 106  } 107 108  /**//// <summary> 109  /// 呈现(已进行错误捕捉处理) 110  /// </summary> 111  /// <param name="writer"></param> 112  protected virtual void RenderByCatchedException(HtmlTextWriter writer) 113  { 114    base.Render (writer); 115  } 116 117  /**//// <summary> 118  /// 呈现异常 119  /// </summary> 120  /// <param name="writer"></param> 121  /// <param name="ex"></param> 122  private void RenderException(HtmlTextWriter writer, Exception ex) 123  {     124    writer.AddAttribute(HtmlTextWriterAttribute.Title, BuildExceptionInfomation(ex)); 125    writer.AddStyleAttribute("font-weight", "700"); 126    writer.AddStyleAttribute("color", "#f00"); 127    writer.AddStyleAttribute("border", "1px solid #ddd"); 128    writer.AddStyleAttribute("cursor", "pointer"); 129    writer.AddStyleAttribute("padding", "0px 3px 0px 3px"); 130    writer.AddStyleAttribute("background-color", "#ffe"); 131    writer.RenderBeginTag(HtmlTextWriterTag.Span); 132    writer.Write("!"); 133    writer.RenderEndTag(); 134  } 135 136  /**//// <summary> 137  /// 生成异常信息 138  /// </summary> 139  /// <param name="ex"></param> 140  /// <returns></returns> 141  private string BuildExceptionInfomation(Exception ex) 142  { 143    StringBuilder sb = new StringBuilder(); 144    sb.Append(ex.Message); 145    sb.Append(Environment.NewLine); 146    sb.Append(ex.GetType().FullName); 147    sb.Append(Environment.NewLine); 148    sb.Append(ex.StackTrace); 149    return sb.ToString(); 150  } 151   152  /**//// <summary> 153  /// 中断程序的执行 154  /// </summary> 155  /// <param name="ex"></param> 156  protected virtual void Interrupt(Exception ex) 157  { 158    throw new HttpUnhandledException(ex.Message, ex); 159  } 160} 161

上面的代码只重载了OnPreRender、Render和CreateChildControls三个方法,实际上还有OnInit、OnLoad等,可以视实际需要而重载,这样重载之后,所有错误都被捕捉,并存放在错误栈中,并在呈现时将错误以某种格式呈现在界面上。注意,继承AbstractControl基类的控件应重载如RenderByCatchedException之类的方法。

如果某些错误不希望被捕捉,而是直接抛出到页面上,这时候还可以调用Interrupt方法来将错误直接抛出到页面上,并中断整个页面的执行。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号