后台获取前台 服务器控件的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" %>
最后终于完成了我的任务。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。