Question

J'utilise un HTML HtmlTextWriter pour générer du code HTML.

try
{
   htw.RenderBeginTag( HtmlTextWriterTag.Span );

   htw.Write(myObject.GenerateHtml());

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

Dans cet exemple, si une exception d'erreur est déclenchée pendant myObject.GenerateHtml () , je générerai une belle erreur html, mais elle sera précédée par une ouverture span . tag qui n'est jamais fermé.

Je pourrais le refactorer comme si

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);
}

À présent, mon champ d'action ne s'ouvre pas tant que le travail n'a pas été accompli, mais cela me semble gênant. Est-il possible de revenir en arrière avec un HtmlWriter? Même si je devais mettre des tonnes de blocs en utilisant.

Je travaille actuellement sur .Net 2.0, mais une discussion des solutions dans la version 3.5 serait acceptable.

Était-ce utile?

La solution

Si vous êtes uniquement préoccupé par les erreurs qui se produisent lors de l'appel de GenerateHtml () et que vous n'aimez pas la deuxième approche (ce qui me semble bien), pourquoi ne pas déplacer la balise de fermeture dans un dernier bloc, puis retirez-la l'appel ouvert:

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

De cette façon, la plage est toujours ouverte et toujours fermée. Si GenerateHtml lève une exception, vous la récupérez et générez l'erreur à l'intérieur de la plage avant de la fermer.

Bien sûr, si l’exception survient lorsqu’elle tente d’écrire les balises, vous n’aurez pas de chance d’écrire un message d’erreur quand même, alors je suppose que cela est géré ailleurs.

Autres conseils

Évitez d'utiliser try / catch et vérifiez plutôt si le résultat obtenu n'est pas conforme à vos attentes. La seule chose que je peux voir ici, c'est que myHTML peut être nul, alors essayez quelque chose comme ceci:

string myHtml = myObject.GenerateHtml ();

if (myHTML != null)
{
   htw.RenderBeginTag( HtmlTextWriterTag.Span );
   htw.Write(myHtml)     
   htw.RenderEndTag( );
else
{
   GenerateHtmlErrorMessage(htw);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top