首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用.Net HtmlTextWriter实现异常安全/处理?

使用.Net HtmlTextWriter实现异常安全/处理?
EN

Stack Overflow用户
提问于 2008-11-13 09:26:53
回答 2查看 562关注 0票数 0

我正在使用.Net HtmlTextWriter来生成超文本标记语言。

代码语言:javascript
复制
try
{
   htw.RenderBeginTag( HtmlTextWriterTag.Span );

   htw.Write(myObject.GenerateHtml());

   htw.RenderEndTag( );
}
catch (Exception e)
{
   GenerateHtmlErrorMessage(htw);
}

在本例中,如果在myObject.GenerateHtml()期间触发了一个错误异常,我将生成一个很好的错误html,但它的前面将是一个永远不会关闭的开始span标记。

我可以像这样重构它。

代码语言:javascript
复制
try
{
   string myHtml = myObject.GenerateHtml();

   // now hope we don't get any more exceptions
   htw.RenderBeginTag( HtmlTextWriterTag.Span );
   htw.Write(myHtml)     
   htw.RenderEndTag( );
}
catch (Exception e)
{
   GenerateHtmlErrorMessage(htw);
}

现在我的跨度不会打开,直到我完成了艰苦的工作,但这对我来说只是看起来很笨拙。有没有办法用HtmlWriter回滚?即使我必须放入大量的using块。

我目前使用的是.Net 2.0,但是可以在3.5中讨论解决方案。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2008-11-15 08:06:05

如果您只关心在GenerateHtml()调用过程中发生的错误,而不喜欢第二种方法(对我来说似乎没问题),为什么不将关闭的span标记移到一个finally块中,并取出打开的调用:

代码语言:javascript
复制
htw.RenderBeginTag( HtmlTextWriterTag.Span );
try
{
   htw.Write(myObject.GenerateHtml());
}
catch (Exception e)
{
   GenerateHtmlErrorMessage(htw);
}
finally
{
   htw.RenderEndTag( );
}

这样,跨度始终处于打开和关闭状态。如果GenerateHtml抛出异常,您将捕获它并在关闭它之前在跨度内生成错误。

当然,如果在尝试编写标记时发生异常,那么无论如何您都不会编写错误消息,所以我将假定这是在其他地方处理的。

票数 1
EN

Stack Overflow用户

发布于 2008-11-13 09:41:52

您应该避免使用try/catch,而应检查结果是否与您预期的不同。我在这里看到的唯一一件事是,myHTML可以是空的,所以尝试如下所示:

string myHtml = myObject.GenerateHtml();

代码语言:javascript
复制
if (myHTML != null)
{
   htw.RenderBeginTag( HtmlTextWriterTag.Span );
   htw.Write(myHtml)     
   htw.RenderEndTag( );
else
{
   GenerateHtmlErrorMessage(htw);
}
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/286619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档