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

在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"


你可能感兴趣的:(在服务器端提取ASP.NET控件输出的HTML)