陈斌彬的技术博客

Stay foolish,stay hungry

NET-RenderControl

当要把一个控件的html代码包括内容输出时(比如导出word或excel或直接输出来,或通过httpxmlrequest返回)就要使用控件的 rendcontrol()方法,比如gridview :

    System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
    System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
    MyGrid.RenderControl(oHtmlTextWriter);
    Response.Write(oStringWriter.ToString());
    Response.End();

页面将建立一个HtmlTextWriter类的实例;在这个实例中封装了相应流,接着页面会把HtmlTextWriter对象传递给RenderControl,RenderControl会检查控件的Visible属性是否为真,如果是真,RenderControl会调用Render方法,而Render方法会去调用RenderContents,RenderContents方法负责将控件的内容呈现到指定的编写器中,如果控件有子控件的话,Render方法又会把HtmlTextWriter传递给RenderChildren方法,RenderChildren方法负责生成控件的子控件。

我们可以这样认为rendercontrol方法先把控件内容输出到htmlTextWriter,又因为ostringwriter跟htmltextwriter有关联,所以内容也就存储在ostringwriter中 继而通过response.write(ostringwriter.tostring())输出。