后台获取前台 服务器控件的innerHtml。

刚装的8.1,编辑器有问题

今天遇到一个需求,div里后台动态生成一个table表单,在我提交的时候需要顺便提交一个快照,方便以后进行查阅。

前台我有,Div,id="div1" runat="server";当我在div里自己添加一个table的时候,string s=div1.innerHTML;没有问题,但是当我动态生成的时候就会出错,提示:无法获取 div1的内部内容,因为该内容不是文本。后来在网上查阅,发现这样一句话

//那是因为你的CardDiv里包含了 run="server"的控件。
//如果是这样不会出错:
<div id="CardDiv" runat="server">
         <table>
             <tr>
                 <td>
                     ssssssssss
                 </td>
             </tr>
         </table>
     </div>
//但是如果是这样的话就会出错:
 <div id="CardDiv" runat="server">
         <table id="table1" runat="server">
             <tr>
                 <td>
                     ssssssssss
                 </td>
             </tr>
         </table>
     </div>

 

所以用innerHtml肯定是无法实现的了,后台在网上找了另外一个方法:

System.Text.StringBuilder strb = new System.Text.StringBuilder();
System.IO.StringWriter sw = new System.IO.StringWriter(strb);
System.Web.UI.HtmlTextWriter htw = new HtmlTextWriter(sw);
CardDiv.RenderControl(htw);

strb.ToString();//就是你想要的结果

 

可是这里也有个问题。就是当我的div里还有其他的服务器控件他就会报错,“类型“TextBox”的控件“txt”必须放在具有 runat=server 的窗体标记内。”

后来又在网上发现这个问题的的解决方法:

        public override void VerifyRenderingInServerForm(Control control)
        {
            //base.VerifyRenderingInServerForm(control);
        }

 

但是还是有点问题“只能在执行 Render() 的过程中调用 RegisterForEventValidation;”

再次寻找,http://www.cnblogs.com/xucanzhao/archive/2006/04/29/388576.html所说的

1.修改web.config(不推荐)<pages enableEventValidation ="false" ></pages>
2.直接在导出Execl的页面修改 
<%@ Page Language="C#" EnableEventValidation = "false" AutoEventWireup="true"

 CodeFile="ExportGridView.aspx.cs" Inherits="ExportGridView" %>

 

最后终于完成了我的任务。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。