HtmlTextWriter to String - Я что-то пропускаю?

Возможно, я все делаю неправильно (и, пожалуйста, скажите мне, если это так), но я бью себя головой об стену с чем-то, что кажется действительно простой концепцией.

Это переопределение отрисовки происходит из пользовательского элемента управления.

<code>protected override void Render(HtmlTextWriter writer)
{
    string htmlAboutToBeRendered = writer.GetWhatHasBeenWrittenToTheWriterSoFar();

    // Do something nefarious, yet unrelated with htmlAboutToBeRendered
}
</code>

Кажется, что есть очевидный способ сделать это, но я не могу найти его.

Кто-нибудь может пролить свет на это для меня, пожалуйста?

Ответы на вопрос(3)

ender, OnAttributeRender и OnStyleRender и изменять теги по мере их отображения. Документы MSDN для OnTagRender показывают пример изменения тега во время рендеринга:

http://msdn.microsoft.com/en-us/library/system.web.ui.htmltextwriter.ontagrender.aspx

Решение Вопроса

protected override void RenderContents(HtmlTextWriter output)  
{  
   StringBuilder sb = new StringBuilder();  
   HtmlTextWriter htw = new HtmlTextWriter(new System.IO.StringWriter(sb,   
   System.Globalization.CultureInfo.InvariantCulture));  
   foreach (Control ctrl in Controls)  
   {  
      ctrl.RenderControl(htw);  
   }  
  string strContents = sb.ToString();  

}

 Adam McKee17 июн. 2009 г., 20:19
+1 Это тот самый! Спасибо за помощь!
 Adam McKee17 июн. 2009 г., 22:39
Просто для продолжения - я открыл Reflector и обнаружил, что метод Render просто вызывает RenderChildren для каждого элемента управления в дереве под пользовательским элементом управления. Это означает, что вы были в курсе этого. Еще раз спасибо!

private string GetString(HtmlTextWriter writer) 
{
   // the flags to see the internal properties of the writer
   System.Reflection.BindingFlags flags = System.Reflection.BindingFlags.Default;
   flags |= System.Reflection.BindingFlags.NonPublic;
   flags |= System.Reflection.BindingFlags.Instance;
   flags |= System.Reflection.BindingFlags.FlattenHierarchy;
   flags |= System.Reflection.BindingFlags.Public;

   // get the information about the internal TextWriter object
   System.Reflection.FieldInfo baseWriter = writer.GetType().GetField("writer", flags);

   // use that info to create a StringWriter
   System.IO.StringWriter reflectedWriter = (System.IO.StringWriter)baseWriter.GetValue(writer);

   // now we get a StringBuilder!
   StringBuilder builder = reflectedWriter.GetStringBuilder();

   return builder.ToString();
}

Тогда это просто вопрос воссоздания HtmlTextWriter с использованием строки и StringBuilder.

Это было построено, используя пару подсказок, которые я взял изразговор между Томом Спинком и Ротси на EggheadCafe

 26 янв. 2015 г., 15:38
Согласившись с @tomfanning, я не вижу смысла в использовании отражения здесь.
 04 июн. 2010 г., 15:09
Тьфу! Это не приятно ...

Ваш ответ на вопрос