2008-11-13 9 views
0

.Net HtmlTextWriter을 사용하여 HTML을 생성하고 있습니다. .Net HtmlTextWriter로 예외 안전/처리?

try 
{ 
    htw.RenderBeginTag(HtmlTextWriterTag.Span); 

    htw.Write(myObject.GenerateHtml()); 

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

오류 예외가 myObject.GenerateHtml() 동안 해고되는 경우이 예제에서, 나는 좋은 오류 HTML을 생성하지만 폐쇄되지 않습니다 오프닝 span 태그로 시작됩니다.

나는 지금 너무

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를 사용하여 롤백 할 수 있습니까? 비록 내가 사용하는 블록을 많이 넣어야 만했다.

현재 .Net 2.0에서 작업하고 있지만 3.5의 해결책에 대한 설명은 괜찮습니다.

답변

1

당신이 GenerateHtml() 호출 중에 발생하고, (나에게 잘 보인다) 두 번째 방법을 좋아하지 않는 오류에 대한에만 관심이 있다면, 왜 finally 블록에 닫는 span 태그를 이동하지 전화를 끊으십시오.

htw.RenderBeginTag(HtmlTextWriterTag.Span); 
try 
{ 
    htw.Write(myObject.GenerateHtml()); 
} 
catch (Exception e) 
{ 
    GenerateHtmlErrorMessage(htw); 
} 
finally 
{ 
    htw.RenderEndTag(); 
} 

이렇게하면 스팬이 항상 열리고 항상 닫힙니다. GenerateHtml이 예외를 throw하면이를 잡아 내고 스팬 내에서 오류를 생성 한 다음 닫습니다.

물론 예외가 태그 쓰기를 시도하는 경우, 어쨌든 오류 메시지를 작성하는 것은 불가능하므로 다른 곳에서 처리되고 있다고 가정합니다.

-2

try/catch를 사용하지 말고 결과가 예상 한 것과 다른지 확인하십시오. 여기서 볼 수있는 유일한 것은 myHTML이 null 일 수 있으므로 다음과 같이 시도하십시오.

string myHtml = myObject.GenerateHtml();

if (myHTML != null) 
{ 
    htw.RenderBeginTag(HtmlTextWriterTag.Span); 
    htw.Write(myHtml)  
    htw.RenderEndTag(); 
else 
{ 
    GenerateHtmlErrorMessage(htw); 
} 
+0

코드가 예외를 throw 할 수있는 경우 캐치 시도를 피하는 방법은 무엇입니까? – tpower

+0

코드가 잘못되어 데이터베이스를 제어 할 수없는 경우에만 사용해야합니다. 데이터베이스가 가동되어 실행 중인지 확신 할 수 없지만 문자열이 null인지 확인할 수 있습니다. try/catch를 피할 수 있으면 그렇게하십시오. –

+0

전적으로 동의하지 않습니다. 예외는 던지지 마십시오. 그렇지만 잡는 일은 피하십시오. – tpower