2008-11-13 6 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(), и не нравится второй подход (который, кажется, хорошо для меня), почему бы не переместить калибровочный закрытия тега в блоке, наконец, , и вывести открытый звонок:

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

Таким образом, пролет всегда открыт и всегда закрыт. Если GenerateHtml выдает исключение, вы его ломаете и генерируете ошибку внутри диапазона, перед закрытием.

Конечно, если возникло исключение, пытаясь написать теги, вам все равно не удастся написать сообщение об ошибке, поэтому я предполагаю, что это обрабатывается в другом месте.

-2

Вам следует избегать использования try/catch и вместо этого проверить, не является ли результат не тем, что вы ожидали. Единственное, что я вижу здесь, это то, что myHTML может быть нулевым, поэтому попробуйте что-то вроде этого:

string myHtml = myObject.GenerateHtml();

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

Как я могу избежать попыток уловов, когда мой код может генерировать исключения? – tpower 2008-11-13 09:43:44