Asp.net 调用this.PageRenderControl抛出;一个页面可以有一个服务器端表单标签";

Asp.net 调用this.PageRenderControl抛出;一个页面可以有一个服务器端表单标签";,asp.net,Asp.net,我需要生成带有html页面内容的pdf。我在Pre_render event中有以下代码: StringWriter sw = new StringWriter(); HtmlTextWriter hw = new HtmlTextWriter(sw); this.Page.RenderControl(hw); string pageContent = sw.ToString(); // Generate PDF file to export some code.. 这会抛出一个“页面

我需要生成带有html页面内容的pdf。我在Pre_render event中有以下代码:

StringWriter sw = new StringWriter(); 
HtmlTextWriter hw = new HtmlTextWriter(sw);

this.Page.RenderControl(hw); 
string pageContent = sw.ToString();

// Generate PDF file to export
some code..

这会抛出一个“页面可以有一个服务器端表单标记”。如果我重写Render方法而不执行任何操作,则生成的pdf没有内容。防止这种情况的任何解决方法?

当您获取整个页面的HTML并将其呈现给客户端时,您现在有两个带有
runat=“server”
属性的表单。不要将整个页面呈现为HTML,然后像那样将其写入客户端。如果您更新了您的问题,并说出了您想要实现的目标(您应该首先提供),那么我们可以为您提供将整个页面的HTML重新呈现给客户端的替代方案

如果您想使用页面上包含的信息生成PDF,我建议您自定义生成PDF,而不是将页面内容呈现为PDF,因为结果不太可控

但是,如果必须执行页面内容,则将所有页面内容放在面板中,然后渲染面板而不是页面

<asp:Panel runat="server" id="PageContents">
<%-- Put your page contents here, inside the Panel --%>
</asp:Panel>

请确保在呈现的页面中只有“一个”表单标记,可能您将一个表单标记放在母版页中,另一个表单标记放在aspx oneI没有母版页中。而且ClientIDMode是可预测的,我需要生成一个包含页面内容的pdf,这是个好主意。最初的问题是,我能够生成pdf,但当对话框出现时无法下载。这个错误就是我在问题中描述的。当我在将html呈现为pdf的逻辑之后添加Response.End()时,效果很好。
StringWriter sw = new StringWriter(); 
HtmlTextWriter hw = new HtmlTextWriter(sw);
PageContents.RenderControl(hw); 
string pageContent = sw.ToString();

// Generate PDF file to export
some code..