2010-06-07 3 views
6

Ich habe ein Tool von Drittanbietern, die ein Img-Tag über Code mithilfe von HtmlTextWriter RenderBeginnTag, RenderEndTag & AddAttribute-Methoden erstellt. Ich möchte das resultierende HTML in eine Zeichenfolge erhalten. Ich habe versucht, die Reflektionsmethode erwähnt here, aber ich bekomme einen Fehler "Kann nicht Objekt des Typs 'System.Web.HttpWriter' in den Typ 'System.IO.StringWriter" zu werfen. Der InnerWriter-Typ des HtmlTextWriter hat den Typ HttpWriter.Konvertieren von Inhalten von HtmlTextWriter in eine Zeichenfolge

Irgendwelche Ideen zum Kopieren der Ausgabe HTML in eine Zeichenfolge?

Zusatz: Code von Dritten Steuer

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

Woher kommt der 'HtmlTextWriter'? – SLaks

+0

Es wird an das überschriebene Render-Ereignis des Drittanbieter-Steuerelements übergeben. –

Antwort

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

ctl.RenderControl(h); 

return w.ToString(); 

Offensichtlich hast du richtig die Verbindungen zu schließen. Aber es ist ungefähr das; Ich hatte das für Unit-Tests gemacht, aber ich entschuldige mich, ich habe im Moment nicht den genauen Code vor mir.

HTH.

+0

Ich habe keine Kontrollen. Es ist nur ein img-Tag, das im Code erstellt wurde. Suche nach einer Lösung ausgehend von einem vorhandenen HtmlTextWriter, der einen HttpWriter verwendet. –

+0

Ok, könnten Sie dann Code schreiben, wie Sie mit dem HttpWriter oder HtmlTextWriter arbeiten, damit ich Sie besser beraten kann? –

+0

Siehe meinen Zusatz in der Frage. –

3

Dies sollte für Sie arbeiten:

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

     string html = output.InnerWriter.ToString(); 

Hoffnung, das hilft.

+6

Dies würde den Typ HttpWriter enthalten. –

+1

Hmm ... es funktioniert ganz gut für mich. http://img405.imageshack.us/img405/1568/57208217.png – philipproplesch

+0

Dies funktioniert nur, wenn Sie HtmlWriter yourserl erstellt und StringWriter an sie übergeben haben. Hier rufen Sie StringWriter.ToString() auf. –

Verwandte Themen