2010-06-07 13 views
6

J'ai un outil tiers qui crée une balise img à l'aide des méthodes AddAttribute RenderBeginTag, RenderEndTag & de HtmlTextWriter. Je veux obtenir le HTML résultant dans une chaîne. J'ai essayé la méthode de réflexion mentionnée here mais j'obtiens une erreur "Impossible de lancer l'objet de type 'System.Web.HttpWriter' pour taper 'System.IO.StringWriter". Le type InnerWriter de HtmlTextWriter est de type HttpWriter.Conversion du contenu de HtmlTextWriter en chaîne

Des idées sur la façon de copier le html de sortie dans une chaîne?

Addition: Code de contrôle tiers

protected override void Render(HtmlTextWriter output) 
    { 
    ..... 
    output.AddAttribute(HtmlTextWriterAttribute.Src, src); 
    output.RenderBeginTag(HtmlTextWriterTag.Img); 
    output.RenderEndTag(); 
       <-- What is the HTML now? Maybe look in OnPreRenderComplete event? 

    } 
+0

D'où vient le 'HtmlTextWriter'? – SLaks

+0

Il est passé à l'événement de rendu substitué du contrôle tiers. –

Répondre

9
StringWriter w = new StringWriter(); 
HtmlTextWriter h = new HtmlTextWriter(w); 

ctl.RenderControl(h); 

return w.ToString(); 

De toute évidence, vous devez fermer les connexions correctement. Mais c'est à peu près ceci; J'avais fait cela pour les tests unitaires, mais je m'excuse, je n'ai pas le code exact devant moi pour le moment.

HTH.

+0

Je n'ai aucun contrôle. C'est juste une balise img créée en code. Vous cherchez une solution à partir d'un HtmlTextWriter existant qui utilise un HttpWriter. –

+0

Ok, alors, pourriez-vous poster un code sur la façon dont vous travaillez avec le HttpWriter ou HtmlTextWriter, donc je peux mieux vous conseiller? –

+0

Voir mon ajout dans la question. –

3

Cela devrait fonctionner pour vous:

 output.AddAttribute(HtmlTextWriterAttribute.Src, src); 
     output.RenderBeginTag(HtmlTextWriterTag.Img); 
     output.RenderEndTag(); 

     string html = output.InnerWriter.ToString(); 

Hope this helps.

+6

Cela contiendrait le type qui est HttpWriter. –

+1

Hmm ... ça marche plutôt bien pour moi. http://img405.imageshack.us/img405/1568/57208217.png – philipproplesch

+0

Cela fonctionne uniquement si vous avez créé HtmlWriter yourserlf et lui avez transmis StringWriter. Ici, vous appelez StringWriter.ToString(). –