Microsoft . 技术之路...

—— 专注于微软技术, 分享是快乐的源泉......
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

在服务器端提取ASP.NET控件输出的HTML

Posted on 2008-04-09 09:59  赣江源  阅读(747)  评论(0编辑  收藏  举报
在ASP.NET开发中经常会使用到Web控件和HTML控件,如果想通过代码提取这些控件Render到客户端后生成的HTML样式的话可以通过如下的函数得到。
 1 public string RenderHTML(WebControl objWebCtrl)
 2     {
 3         try
 4         {
 5             System.IO.StringWriter sw = new System.IO.StringWriter();
 6             HtmlTextWriter html = new HtmlTextWriter(sw);
 7 
 8             objWebCtrl.RenderControl(html);
 9             return sw.ToString();
10         }
11         catch (Exception ex)
12         {
13             Console.WriteLine(ex.Message);
return "";
14         }
15     }
16 
17     public string RenderHTML(HtmlControl objHtmlCtrl)
18     {
19         try
20         {
21             System.IO.StringWriter sw = new System.IO.StringWriter();
22             HtmlTextWriter html = new HtmlTextWriter(sw);
23 
24             objHtmlCtrl.RenderControl(html);
25             return sw.ToString();
26         }
27         catch (Exception ex)
28         {
29             Console.WriteLine(ex.Message);
return "";
30         }
31     }
但是如果是GridView,可能在输出时会出现如下的提示信息:
'GridView1' 必须置于 runat=server 的标记中。
这需要在代码中增加:
public override void VerifyRenderingInServerForm(Control control)
{
}
如果GridView有分页时可能会出现如下的提示:
RegisterForEventValidation 只能在 Render(); 期间呼叫。
这个问题可以修改ASPX页面文件的<%Page%>实现,增加两个属性:

EnableEventValidation = "false" AutoEventWireup="true"