时间:2021-07-01 10:21:17 帮助过:8人阅读
- <br>public override void VerifyRenderingInServerForm( <br> Control control <br>) <br> <br>参数 <br>control <br>类型:System.Web.UI..::.Control <br>必须位于 Form 控件中的 ASP.NET 移动控件。 <br>备注 <br>如果在运行时控件未包含在 Form 中,则此方法将重写 Page..::.VerifyRenderingInServerForm 方法以引发异常。 <br>如果回发或使用客户端脚本的服务器控件没有包含在 HtmlForm 服务器控件 (<form runat="server">) 标记中,它们将无法正常工作。这些控件可以在呈现时调用该方法,以在它们没有包含在 HtmlForm 控件中时提供明确的错误信息。 <br>开发自定义服务器控件时,通常在为任何类型的输入标记重写 Render 方法时调用该方法。这在输入控件调用 GetPostBackEventReference 或发出客户端脚本时尤其重要。复合服务器控件不需要作出此调用。 <br>OK,加上以上的函数,编译运行调试。晕,又出现了别外一个错误。<br><br>问题二:只能在执行 Render() 的过程中调用 RegisterForEventValidation。 <br><br>看样子,以上加的那个函数并没有彻底解决问题了。 <br>经过一番搜索和尝试,终于把问题解决了。 <br><br>解决方法1:把上面的函数VerifyRenderingInServerForm去掉,在导出代码中,动态添加一个Form对象,一个Page对象,把表格加入它,并把Form添加给Page。 <br>导出的代码如下:<pre class="brush:php;toolbar:false layui-box layui-code-view layui-code-notepad"><ol class="layui-code-ol"><li><br><span><u></u></span> 代码如下:<pre class="brush:php;toolbar:false layui-box layui-code-view layui-code-notepad"><ol class="layui-code-ol"><li><br>Page p=new Page(); <br>HtmlForm form=new HtmlForm(); <br>Grid1.EnableViewState = false; <br>p.EnableEventValidation = false; <br>p.DesignerInitialize(); <br>form.Controls.Add(Grid1); <br>p.Controls.Add(form); <br>StringBuilder sb=new StringBuilder(); <br>StringWriter sw=new StringWriter(sb); <br>p.RenderControl(sw); <br>Response.Clear(); <br>Response.Buffer = true; <br>Response.ContentType = "application/vnd.ms-excel"; <br>Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName + ".xls"); <br>Response.Charset = "UTF-8"; <br>Response.ContentEncoding = Encoding.Default; <br>Response.Write(sb.ToString()); <br>Response.End(); <br> <br>解决方法2:修改web.config(不推荐)<pages enableEventValidation ="false" ></pages></li><li> </li><li> </li></ol></pre></li></ol></pre>