HtmlTextWriter to String - Am I overlooking something?

前端 未结 3 1722
再見小時候
再見小時候 2020-12-17 17:16

Perhaps I\'m going about this all wrong (and please tell me if I am), but I\'m hitting my head against a wall with something that seems like a really simple concept.

相关标签:
3条回答
  • 2020-12-17 17:46

    Try this:

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

    }

    0 讨论(0)
  • 2020-12-17 17:46

    Alternate method using relfection:

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

    Then it's a simple matter of re-creating the HtmlTextWriter using the string and a StringBuilder.

    This was built using a couple clues I picked up from a conversation between Tom Spink and Rotsey on EggheadCafe

    0 讨论(0)
  • 2020-12-17 17:53

    You can derive from HttpTextWriter and override OnTagRender, OnAttributeRender and OnStyleRender methods and modify the tags as they are rendered. The MSDN docs for OnTagRender show a sample where the tag is modified during rendering:

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

    0 讨论(0)
提交回复
热议问题